Возможный дубликат:
C++ разница ключевых слов "typename" и "class" в шаблонах
При определении шаблона функции или шаблона класса в C++ можно написать так:
template <class T> ...
или можно написать это:
template <typename T> ...
Есть ли веская причина, чтобы предпочесть одно другому?
Я принял самый популярный (и интересный) ответ, но реальным ответом, похоже, было "Нет, нет веской причины отдавать предпочтение одному".
- Они эквивалентны (кроме как указано ниже).
- У некоторых людей есть причины всегда использовать
typename
. - У некоторых людей есть причины всегда использовать
class
. - У некоторых людей есть причины использовать оба.
- Некоторым людям все равно, какой из них они используют.
Однако обратите внимание, что до C++ 17 в случае параметров шаблона шаблона требовалось использовать class
вместо typename
. Смотрите user1428839 ответ ниже. (Но этот конкретный случай не является вопросом предпочтения, это было требование языка.)