template <class C>
C fnc();
template <>
int fnc(){return 0;}
template <class C>
C var;
template <>
int var = 0; // compile error
int main()
{
}
Существует специализация функции fnc
, объявленной без явного указания типа (например, int fnc<int>()
), поэтому тип аргумента шаблона выводится из типа, возвращаемого функцией, но эта вещь не работает для шаблоны переменных (это приводит к ошибке компилятора). Это правильное поведение или ошибка во всех протестированных компиляторах (clang, g cc)?