Разница между auto в шаблонном типе и типе шаблонной переменной
В чём разница между следующими объявлениями? Одинаковый ли код генерируется? Что лучше использовать?
template <auto X>
constexpr int x = X;
template <int X>
constexpr auto x = X;
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
В первом случае на тип шаблонного параметра не накладывается строгое ограничение, надо лишь, чтобы его можно было привести в int, раз уж x имеет такой тип...
А во втором случае тип шаблонного параметра задан предельно точно — int и никак иначе. Соответственно, x автоматически имеет тип int.
Так что в таком коде получим в одном случае предупреждение, во втором — ошибку.
template <auto Y>
constexpr int y = Y;
template <int X>
constexpr auto x = X;
int main()
{
cout << y<3.5>; // Предупреждение
coun << x<4.5>; // Ошибка
}