Пытаясь решить эту проблему, мне стало интересно. Рассмотрим следующий код:
template <typename T>
struct foo
{
foo(T const& x) : data(x) {}
T data;
};
Кажется, что я могу построить объект типа foo<T const&>
без ошибок, гипотетический T const& const&
понимается как T const&
.
Похоже, что это называется сбрасыванием ссылок, но я никогда не слышал этого термина раньше (см. комментарии в связанном вопросе).
Это широко распространено? Является ли этот стандарт?