Почему я не могу объявить шаблонные псевдонимы типов внутри функций?

Почему я не могу объявить шаблонный псевдоним типа внутри функции?

#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). —Конечная записка]

Другие вопросы по тегам