我发现了这段伪造的代码(下面的设计示例):
template <int I, typename T>
struct foo
{
static int bar()
{
return 1;
}
};
template <std::size_t Index, typename T>
struct foo<Index, T*>
{
static int bar()
{
return 2;
}
};
Run Code Online (Sandbox Code Playgroud)
请注意,专业化使用不同的类型(错误).令人惊讶的是,它在没有GCC 4.8.1和Clang 3.4的任何错误(或警告)的情况下进行编译.但对于海湾合作委员会的foo<0, int*>::bar()结果来说更奇怪的是1,但是Clang给出了2.到底是怎么回事?是否仍然被标准视为专业化?