Su código ni siquiera debería compilar. Los compiladores que conozco no compilarán el código o, por lo menos, lanzarán una advertencia.
En su lugar, significó return S(value)
, luego, por el bien del cielo COPIA PEGUE EL CÓDIGO QUE PUBLICA AQUÍ.
Reescribir e introducir errores tipográficos solo significa que es imposible para nosotros adivinar de qué errores está preguntando acerca de, y cuáles fueron los accidentes que debemos ignorar.
Cuando publique una pregunta en cualquier lugar de Internet, si esa pregunta incluye el código, PUBLIQUE EL CÓDIGO EXACTO.
Ahora, asumiendo que esto fue realmente un error tipográfico, el código es perfectamente legal, y no hay ninguna razón por la cual cualquier herramienta debería advertirle.
Siempre que no intente desreferenciar la referencia colgante, el código es perfectamente seguro.
Es posible que algunas herramientas de análisis estático (Valgrind o MSVC con/analice, por ejemplo) puedan advertirle sobre esto, pero no parece tener mucho sentido porque no está haciendo nada incorrecto. Estás devolviendo un objeto que contiene una referencia colgante. No está devolviendo directamente una referencia a un objeto local (sobre qué compiladores normalmente llama el ), sino un objeto de nivel superior con un comportamiento que podría hacer que sea perfectamente seguro de usar, aunque contenga una referencia a un objeto local que sea fuera de alcance.
Eso ni siquiera debería compilarse . Estás vinculando una referencia a un literal entero. ¿Qué compilador estás usando? – jalf
@jalf lo siento, debería haber sido S (valor) – Anycorn
¿Por qué necesita herramientas para detectar esto? Simplemente no escriba un código obviamente erróneo como ese. Es muy, muy poco probable que una clase con un miembro de referencia sea correcta. –