我目前正在开发一个包含大量模板的类,能够构建元组元组会让它变得更容易
但我在MSVC ++ 2010中尝试了这个简单的代码:
#include <tuple>
void main() {
auto x = std::make_tuple(std::make_tuple(5, true));
}
我收到编译错误。如果我不使用std :: make_tuple但直接使用std :: tuple的构造函数
,则会出现同样的问题它是MSVC的错误还是标准不允许的元组元组?
谢谢
答案 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可能不是。