¿Por qué no hay advertencia de gcc / g ++ para los temporales no utilizados?

Considere el siguiente código:

void ListenerImpl::attach(boost::shared_ptr<ISubscriber> subscriber)
{
    boost::unique_lock<boost::mutex>(mtx);
    subscribers.push_back(subscriber);
}

void ListenerImpl::notify(MsgPtr msg)
{
    boost::unique_lock<boost::mutex>(mtx);

    //notify all subscribers
    BOOST_FOREACH(boost::shared_ptr<ISubscriber> subscriber, subscribers){
        subscriber->update(msg);
    }

}

(Esta es una implementación de un patrón de observador como se describe en GoF.) La intervención del usuario aquí fue proteger el adjunto () y el aviso () de la ejecución simultánea, de ahí el impulso :: unique_lock. El objetivo era proteger lasubscribers envase

Pero de hecho es extremadamente difícil notar quelas cerraduras son de hecho solo temporales (mira más de cerca, no hay nombres asignados para ellos). Entonces, el bloqueo en el mutex se liberará de inmediato, cuando se destruya el temporal, es decir, el código no es seguro para subprocesos. Esperaría en situaciones como esta una advertencia del compilador. Algo así como "Temporal no utilizado".

Incluso peor, cppcheck tampoco reconocería este error. (cppcheck: una herramienta de análisis de código c / c ++http: //sourceforge.net/apps/mediawiki/cppcheck/index.php? title = Main_Page)

Gcc emite advertencias sobre variables no utilizadas. El temporal aquí es una variable no utilizada, y definitivamente el resultado de la falta de atención del programador. Entonces, ¿por qué no hay advertencias en casos como este? ¿Quizás es demasiado complicado descubrir tales situaciones?

Respuestas a la pregunta(3)

Su respuesta a la pregunta