Если вы напишите такой шаблон
template <typename T>
using X = const T;
в чем смысл const T?
Чтобы узнать об этом, я написал эту программу:
std::cout << std::boolalpha
<< std::is_same_v<X<int&>, int&> << '\n'
<< std::is_same_v<X<const int*>, const int* const> << '\n'
<< std::is_same_v<X<const int&>, const int&> << '\n';
и, к моему удивлению, все ответы были правдой.
Почему X является int &, а не const int &?
Я скомпилировал его с помощью gcc 7.3.0 и clang ++ 6.0. Тот же ответ.