gpt4 book ai didi

c++ - 嵌套可变参数模板 : bug in gcc or clang?

转载 作者:行者123 更新时间:2023-11-30 03:04:04 29 4
gpt4 key购买 nike

以下代码不能用 gcc 4.7 (20120114) 编译,但可以用 clang++ 3.0 编译。这是 gcc、clang 中的错误还是仅仅因为我尝试做的事情在 c++11 中是不允许的?

template< typename... args >
struct A {
template< typename head, typename... tags >
struct Inner : public Inner<tags...> {
};

template< typename head >
struct Inner<head> {
// assume both args... and tags... must be used to
// calculate TYPE
typedef int TYPE;
};
};

template< typename... args >
struct B : A<args...> {
template<typename... tags>
typename A<args...>::template Inner<tags...>::TYPE x() {
return 0;
}
};

int main(int argc, const char *argv[]) {
B<int, int, int> b;
b.x<char, short, long, double>();

return 0;
}

上面的代码是我尝试做的一个非常简化的例子,但实质是我需要 args... 类型和标签... 类型来计算函数的返回类型。如何做到这一点?

最佳答案

不确定这是否是 gcc 的错误,但使其在 gcc 上编译的标准解决方案是声明空可变参数版本,然后对其进行特殊化:

template <typename... T> 
struct Inner;
template <typename Head, typename... Rest>
struct Inner<Head, Rest...> : public Inner<Rest...> { ... };

演示:http://ideone.com/MFKVY

关于c++ - 嵌套可变参数模板 : bug in gcc or clang?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8951994/

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