5

我在编写一个类似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. 代码无法编译:
  2. 如果我添加(1),它会编译。
  3. 如果我删除(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不喜欢我的代码的原因吗?

4

1 回答 1

3

这很可能是 g++ 4.7 中的错误,已在 g++ 4.8 中修复。Ideone(使用 g++ 4.7.2,如果不复制您的代码示例,我无法链接到它,argh)给出了您提到的错误,而Coliru(使用 g++ 4.8)编译没有错误。

于 2013-05-28T07:42:22.533 回答