Шаблонная специализация переменных шаблонов и вывод типов - PullRequest
0 голосов
/ 23 апреля 2020
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)?

1 Ответ

1 голос
/ 23 апреля 2020

Аргументы шаблона могут быть опущены только при явной специализации шаблонов функций. Поскольку у вас есть переменная шаблона, вы должны добавить часть <int>:

template <>
int var<int> = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...