Специализация функции шаблона после точки использования нарушит компиляцию

Рассмотрим следующий пример:

#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 устранит ошибку.

5
задан BЈовић 6 May 2011 в 14:14
поделиться