Я в настоящее время работаю над классом с большим количеством шаблонов, и способность создать кортежи кортежей сделала бы его намного легче
Но я попробовал этот простой код в MSVC ++ 2010:
#include <tuple>
void main() {
auto x = std::make_tuple(std::make_tuple(5, true));
}
И я получаю ошибку компиляции. Та же проблема происходит, если я не использую std::make_tuple
но непосредственно std::tuple
конструктор.
Действительно ли это - ошибка MSVC, или разве кортежи кортежей не позволяются стандартом?
Дополнительные точки данных:
Если мы используем std :: tr1 :: tuple
и явно укажем тип вместо использования auto
], то Visual C ++ 2008 компилирует код без ошибок. Попытка скомпилировать тот же код с Visual C ++ 2010 приводит к появившейся ошибке.
Если мы используем boost :: tuple
a явно указываем тип вместо использования auto
, то Visual C ++ 2008 и Visual C ++ 2010 компилируют код без ошибок.
Похоже, это ошибка реализации.
Вы создаете кортеж только с одним членом - разве это не противоречит цели кортежей? В любом случае, я подозреваю, что это приводит к двусмысленности.
make_tuple
объединяет вывод типа с вызовом конструктора tuple
. Когда конструктор кортежа
вызывается с единственным аргументом, который также является кортежем
, возможно, что преобразующий конструктор подходит лучше, чем оборачивающий. Отсюда проблема.
Кортежи кортежей разрешены. Кортежи кортежей могут быть не разрешены.