C++ 内显式实例化';结构';名称空间是GCC下的错误吗?
我发现了一些类似的问题,但没有一个像我这样简单,因为我在一个结构范围内有一个模板,它被明确地专门化了。在C++ 内显式实例化';结构';名称空间是GCC下的错误吗?,c++,templates,gcc,clang,c++17,C++,Templates,Gcc,Clang,C++17,我发现了一些类似的问题,但没有一个像我这样简单,因为我在一个结构范围内有一个模板,它被明确地专门化了。在MSVC下,这很好,并且Clang>6.0.1但是GCC报告所有版本的错误 根据标准,哪个编译器是正确的 这个问题的一个最简单的例子是: 错误:“TFoo”在类范围中的显式专门化 结构栏 { 模板 类TFoo { }; //*GCC(全部)6.2至11.1+主干 //错误:非命名空间作用域的结构栏中存在显式专门化 //错误:模板参数列表太少 //*叮当作响供参考:Fab,我在Stackover
MSVC
下,这很好,并且Clang>6.0.1
但是GCC
报告所有版本的错误
根据标准,哪个编译器是正确的
这个问题的一个最简单的例子是:
错误:“TFoo”在类范围中的显式专门化
结构栏
{
模板
类TFoo
{
};
//*GCC(全部)6.2至11.1+主干
//错误:非命名空间作用域的结构栏中存在显式专门化
//错误:模板参数列表太少
//*叮当作响供参考:Fab,我在Stackoverflow上的搜索结果并没有出现这个问题,不管是什么原因!感觉像是一个bug,很高兴知道。
struct Bar
{
template<typename T>
class TFoo
{
};
// * GCC (ALL) 6.2 to 11.1 + trunk
// error: explicit specialization in non-namespace scope 'struct Bar
// error: too few template-parameter-lists
// * Clang <= 6.0.1
// error: explicit specialization of 'TFoo' in class scope
template<>
class TFoo<int>
{
int a;
};
};