我的问题可以通过以下代码片段概括:
template <typename T> struct C2;
template <typename T>
struct C1
{
template <typename Type,
template <typename Ti> class Container = C2>
void m() {}
};
template <typename T>
struct C2
{
template <typename Type = int,
template <typename Ti> class Container = C2> // <-- Here is the problem!
void m() {}
};
GNU编译器版本4.8.1出现以下错误信息:
test-temp.C:16:47: error: invalid use of type ‘C2<T>’ as a default value for a template template-parameter
template <typename Ti> class Container = C2>
它指的是方法C2::m的默认模板参数C2。
显然(这是我的观点),编译器将>视为默认参数,而不是没有的C2。因此,当它找到该指令时,由于类型>与不匹配,它会失败。
然而,clang++对于完全相同的代码编译得很好!
我的问题:
- 哪个编译器是正确的?
- 是否有一些替代方案来使用当前版本的gnu编译器表达相同的意义?
谢谢您提前
Leandro