c++ - reinterpret_cast - ¿Por qué está(int &) 0 mal formado?
reinterpret_cast c++ (1)
De acuerdo con [expr.cast] / 4, un reparto de estilo C prueba los siguientes repartos en orden:
const_cast
-
static_cast
-
static_cast
seguido deconst_cast
-
reinterpret_cast
-
reinterpret_cast
seguido deconst_cast
El siguiente reparto está bien formado:
const_cast<int&>(static_cast<const int&>(0))
Sin embargo, tanto GCC como Clang reject el reparto (int&)0
. ¿Por qué?
La razón por la que se rechaza el cast (int &) 0 es porque está intentando emitir un literal como una referencia que realmente no tiene sentido. El operador & espera un valor de referencia y no puede hacer referencia a un literal. El compilador ve que está emitiendo un literal como rvalue, por lo tanto main.cpp:2:11: error: invalid cast of an rvalue expression of type ''int'' to type ''int&''
Esta pregunta no se reduce realmente a la jerarquía de los modelos, sino a la incapacidad de emitir literales como referencias.
Edición: Nota rápida, estoy un poco confundido por su redacción, es const_cast<int&>(static_cast<const int&>(0));
¿Aceptado por el compilador? No debería ser debido a lanzar un lvalue como un rvalue. Si es así, debo haber entendido mal la pregunta y recusaré mi respuesta.