Кортежи кортежей позволяются?

Я в настоящее время работаю над классом с большим количеством шаблонов, и способность создать кортежи кортежей сделала бы его намного легче

Но я попробовал этот простой код в MSVC ++ 2010:

#include <tuple>

void main() {
     auto x = std::make_tuple(std::make_tuple(5, true));
}

И я получаю ошибку компиляции. Та же проблема происходит, если я не использую std::make_tuple но непосредственно std::tupleконструктор.

Действительно ли это - ошибка MSVC, или разве кортежи кортежей не позволяются стандартом?

8
задан Deduplicator 26 August 2019 в 12:20
поделиться

2 ответа

Дополнительные точки данных:

  • Если мы используем std :: tr1 :: tuple и явно укажем тип вместо использования auto ], то Visual C ++ 2008 компилирует код без ошибок. Попытка скомпилировать тот же код с Visual C ++ 2010 приводит к появившейся ошибке.

  • Если мы используем boost :: tuple a явно указываем тип вместо использования auto , то Visual C ++ 2008 и Visual C ++ 2010 компилируют код без ошибок.

Похоже, это ошибка реализации.

4
ответ дан 5 December 2019 в 21:15
поделиться

Вы создаете кортеж только с одним членом - разве это не противоречит цели кортежей? В любом случае, я подозреваю, что это приводит к двусмысленности.

make_tuple объединяет вывод типа с вызовом конструктора tuple. Когда конструктор кортежа вызывается с единственным аргументом, который также является кортежем, возможно, что преобразующий конструктор подходит лучше, чем оборачивающий. Отсюда проблема.

Кортежи кортежей разрешены. Кортежи кортежей могут быть не разрешены.

3
ответ дан 5 December 2019 в 21:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: