Por que não há aviso gcc / g ++ para temporários não utilizados?

Considere o seguinte 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 é uma implementação de um padrão de observador, conforme descrito no GoF.) A intervenção do usuário aqui foi para proteger o attach () e o notify () da execução simultânea, daí o boost :: unique_lock. O objetivo era proteger osubscribers container.

Mas é realmente extremamente difícil perceber que os bloqueios são de fato apenas temporários (observe mais de perto, não há nomes atribuídos a eles). Portanto, o bloqueio no mutex será liberado imediatamente, quando o temporário for destruído, ou seja, o código não é seguro para threads. Eu esperaria em situações como esta um aviso do compilador. Algo como "Temporário não utilizado".

Pior ainda, o cppcheck também não reconheceria esse erro. (cppcheck: uma ferramenta de análise de código c / c ++http: //sourceforge.net/apps/mediawiki/cppcheck/index.php? title = Main_Page)

@Gcc emite avisos sobre variáveis não utilizadas. O temporário aqui é uma variável não utilizada e, definitivamente, o resultado da desatenção do programador. Então, por que não há avisos em casos como este? Talvez seja muito complicado descobrir essas situações?

questionAnswers(3)

yourAnswerToTheQuestion