我在编写一个类似C++11
std::tuple
的类并尝试用g++-4.7
. 我基本上需要的是一个包装类型的元组。我写了这样的东西:
#include <tuple>
template <class T>
struct Wrapper { T x; };
template <class... Types>
using Tuple = std::tuple<Wrapper<Types>...>;
template <class... Types>
struct X
{
using MyTuple = Tuple<Types...>;
};
int main( int argc, char** argv )
{
// Tuple<int,int> t; // (1)
using Y = X<int,int>;
Y y; // (2)
return 0;
}
我做了以下观察:
- 代码无法编译:
- 如果我添加
(1)
,它会编译。 - 如果我删除
(1)
and(2)
,它也会编译。
1. 的错误消息:
test.cpp: In instantiation of ‘struct X<int, int>’:
test.cpp:22:4: required from here
test.cpp:10:44: error: wrong number of template arguments (2, should be 1)
test.cpp:4:8: error: provided for ‘template<class T> struct Wrapper’
问:我认为上面的代码是正确的,但这是我第一次真正使用参数包。除了它是一个实验性实现之外,还有什么g++-4.7
不喜欢我的代码的原因吗?