во время экспериментов с C ++ 11 STD :: SCOPED_ALLOCATOR_ADAPTOR
Как реализовано в GCC 4.7.0 до сих пор, я заметил, что C ++ 11 FDI Определяет специализацию STD :: emplation_Allocator
для кортежей для кортежей ( 20.4.2.8 [TUPLE.TRAITS]
), но не для пар, хотя для всех других целей, пары выглядят И действовать так же, как кортежи (у них есть специализации std :: get
, std :: tuple_size
, и т. Д.).
на дальнейшем чтении , n2554 , которые ввели эти вещи, определили ALLOCATOR_ARG
конструкторов и и
ISALLOCATOR
специализация для пар также (стр. 23-24).
Почему они упали на пары? Есть ли другие Способ использовать их, что я не вижу, или это намек на обесценение пар в пользу кортежей?
Мой тестовый код был:
// myalloc is like std::allocator, but has a single-argument
// constructor that takes an int, and has NO default constructor
typedef std::vector> innervector_t;
typedef std::tuple elem_t;
typedef std::scoped_allocator_adaptor, myalloc> Alloc;
Alloc a(1,2);
std::vector v(a);
v.resize(1); // uses allocator #1 for elements of v
// the following line fails to compile if pair is used instead of tuple
// because it attempts to default-construct myalloc for innervector_t
std::get<1>(v[0]).resize(10); // uses allocator #2 for elements of innervector_t