【发布时间】:2016-03-10 15:21:56
【问题描述】:
今天,我和我的一个朋友因一个愚蠢的错误而苦苦挣扎,这让我想知道模板参数在 C++ 中是如何工作的。考虑以下代码,我尝试部分专门化一个类attr<MyClass<I>>,其中I 是unsigned int,尽管MyClass 需要int 参数:
#include <iostream>
template<int I>
class MyClass
{
};
template<typename T>
struct attr;
template<unsigned int I>
struct attr<MyClass<I>>
{
};
int main(int argc, char *argv[])
{
attr<MyClass<1>> att;
return 0;
}
g++ 失败并显示错误消息
main.cpp: In function ‘int main(int, char**)’:
main.cpp:20:22: erreur : aggregate ‘attr<MyClass<1> > att’ has incomplete type and cannot be defined
attr<MyClass<1>> att;
然后clang 编译它(由于att 未使用,因此仅发出警告)。
所以我想知道:
规范中是否有任何内容会支持其中一个或另一个?
我们可以说
clang模板参数的类型比g++的弱吗?
【问题讨论】:
标签: c++ templates c++14 typing