Рассмотрим следующий пример:
#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Я знаю, что если я переместу определение функции перед основным, ошибка исчезнет.