gpt4 book ai didi

c++ - 参数包困惑

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:12 25 4
gpt4 key购买 nike

我刚刚在写一个 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)(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 不喜欢我的代码,除了它是一个实验性实现之外,还有什么原因吗?

最佳答案

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

关于c++ - 参数包困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16786030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com