考虑下一个例子:
#include <iostream>
template< int a >
void foo();
int main(int argn, char* argv[])
{
foo<1>();
}
template<>
void foo<1>()
{
std::cout<<1<<std::endl;
}
编译失败并出现以下错误消息:
rg.cpp:12: error: specialization of ‘void foo() [with int a = 1]’ after instantiation
标准中的哪一段解释了这个错误?
PS:我知道如果我将函数定义移到 main 前面会使错误消失。