嵌套的可变模板:gcc或clang中的错误
Nested variadic templates: bug in gcc or clang?
以下代码不使用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
相关文章:
- 获取 clang++:错误:在编译文件系统库的代码时
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 如何修复 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- "Make"失败并出现 Clang 错误 - 如何从 Clang 获得错误?
- Android NDK.Build命令失败.未定义的引用.clang++:错误:链接器命令失败,退出代码为1
- Clang 错误 – 编译器错误或缺少一些细节?
- 为什么我在以下代码中收到 clang 错误?
- clang:错误:链接器命令失败,C++代码中的退出代码为 1(使用 -v 查看调用)
- NDK Clang 错误:未定义对"localeconv"的引用
- Clang 3.8 错误:参数 '-fuse-ld=gold-2.25' 中的链接器名称无效
- 限定名称和使用声明操作的 clang 错误消息
- 编译模板时的clang错误
- ld:1 个重复符号用于架构x86_64 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- C /R:clang:错误:Linker命令失败,出口代码1(使用-v查看调用)
- clang错误,没有可行的转换
- gcc 未给出的 Clang 错误"attempted to construct a reference element in a tuple with an rvalue"
- Clang:错误:非静态数据成员的使用无效
- 启用 openmp 时出错 - "ld: library not found for -lgomp" 和 Clang 错误
- 为什么在使用初始化语法时不调用转换运算符,为什么 clang 错误消息看起来是错误的
- 当使用 stdlibc++ 4.7 启用 C++11 时,clang 错误,而 gcc 编译正常