C ++ 0x: разрешены ли кортежи кортежей? - PullRequest
8 голосов
/ 15 июля 2010

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

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

#include <tuple>

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

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

Это ошибка MSVC или кортежи кортежей не разрешены стандартом?

Спасибо

Ответы [ 2 ]

4 голосов
/ 15 июля 2010

Больше точек данных:

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

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

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

3 голосов
/ 15 июля 2010

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

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

Допускаются кортежи кортежей. 1-кортежей может не быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...