¿Colapso de referencia?

Al tratar de resolvereste problema, algo me hizo preguntarme. Considere el siguiente código:

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

Parece que puedo construir un objeto de tipofoo<T const&> sin error, lo hipotéticoT const& const& entendido comoT const&.

Parece también que esto se llamacolapso de referencia, pero nunca escuché este término antes (ver comentarios en la pregunta vinculada).

¿Está esto extendido? ¿Es esto estándar?

Respuestas a la pregunta(2)

Su respuesta a la pregunta