Почему я не могу объявить шаблонные псевдонимы типов внутри функций?
Почему я не могу объявить шаблонный псевдоним типа внутри функции?
#include <vector>
int main(){
//type alias deceleration:
template <typename T>
using type = std::vector<T>;
//type instantiation:
type<int> t;
}
ошибка: объявление шаблона не может появиться в области видимости блока
Почему мы вынуждены помещать эти объявления за пределы блока?
#include <vector>
//type alias deceleration:
template <typename T>
using type = std::vector<T>;
int main(){
//type instantiation:
type<int> t;
}
1 ответ
Стандарт говорит так.
Из стандарта C++11 (выделено мое):
14 Шаблон
2 Объявление шаблона может появляться только как область видимости пространства имен или декларация области класса. В объявлении шаблона функции последний компонент идентификатора объявления не должен быть идентификатором шаблона. [Примечание: последний компонент может быть идентификатором, идентификатором оператора-функции, идентификатором функции преобразования или буквенным идентификатором оператора. В объявлении шаблона класса, если имя класса представляет собой простой-шаблон-идентификатор, объявление объявляет частичную специализацию шаблона класса (14.5.5). —Конечная записка]