Referência em colapso?

Ao tentar resolvereste problema, algo me fez pensar. Considere o seguinte código:

template <typename T>
struct foo 
{
    foo(T const& x) : data(x) {}
    T data;
};

Parece que eu posso construir um objeto do tipofoo<T const&> sem erro, o hipotéticoT const& const& sendo entendido comoT const&.

Parece também que isso é chamadocolapso de referência, mas nunca ouvi esse termo antes (veja os comentários na pergunta vinculada).

Isso é generalizado? Isso é padrão?

questionAnswers(2)

yourAnswerToTheQuestion