Почему кортежи имеют image_Allocator, но пары неются?

во время экспериментов с 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

12
задан Cubbi 31 August 2011 в 21:23
поделиться