C ++ 0x:是否允许元组元组?

时间:2010-07-15 09:55:29

标签: visual-c++ c++11 tuples

我目前正在开发一个包含大量模板的类,能够构建元组元组会让它变得更容易

但我在MSVC ++ 2010中尝试了这个简单的代码:

#include <tuple>

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

我收到编译错误。如果我不使用std :: make_tuple但直接使用std :: tuple的构造函数

,则会出现同样的问题

它是MSVC的错误还是标准不允许的元组元组?

谢谢

2 个答案:

答案 0 :(得分:4)

更多数据点:

  • 如果我们使用std::tr1::tuple并显式声明类型而不是使用auto,那么Visual C ++ 2008会编译代码而不会出错。尝试使用Visual C ++ 2010编译相同的代码会导致您看到的错误。

  • 如果我们使用boost::tuple显式声明类型而不是使用auto,那么Visual C ++ 2008和Visual C ++ 2010都会编译代码而不会出错。

看起来它可能是一个实现错误。

答案 1 :(得分:3)

你只用一个成员制作一个元组 - 这不会破坏元组的目的吗?无论如何,我怀疑这会引起歧义。

make_tuple将类型推断与对tuple构造函数的调用相结合。当使用单个参数(也是tuple)调用tuple构造函数时,转换构造函数可能比包装构造函数更合适。因此问题。

允许使用元组元组。 1-Tuples可能不是。