Как SCOPED_LOCK не выделяет «неиспользуемая переменная» предупреждение?

Boost :: Mutex :: Scoped_lock - это удобная оболочка Raii вокруг блокировки мюткс Я использую аналогичную технику для чего-то другого: оболочка Raii, запрашивая интерфейс данных для отсоединения от / повторной прикрепления к последовательному устройству.

То, что я не могу выяснить, однако, почему в коде ниже моего объекта MST - чье здание и разрушение имеют побочные эффекты - причины G ++ Чтобы излучать ошибку предупреждения «Неиспользуемая переменная», тогда как l удается оставаться молчать.

Вы знаете? Можете ли вы сказать мне?

[generic@sentinel ~]$ cat test.cpp
#include <boost/shared_ptr.hpp>
#include <boost/thread/mutex.hpp>
#include <iostream>

struct MyScopedThing;
struct MyWorkerObject {
    void a() { std::cout << "a"; }
    void b() { std::cout << "b"; }

    boost::shared_ptr<MyScopedThing> getScopedThing();
};

struct MyScopedThing {
    MyScopedThing(MyWorkerObject& w) : w(w) {
        w.a();
    }
    ~MyScopedThing() {
        w.b();
    }

    MyWorkerObject& w;
};

boost::shared_ptr<MyScopedThing> MyWorkerObject::getScopedThing() {
    return boost::shared_ptr<MyScopedThing>(new MyScopedThing(*this));
}

int main() {
    boost::mutex m;
    boost::mutex::scoped_lock l(m);

    MyWorkerObject w;
    const boost::shared_ptr<MyScopedThing>& mst = w.getScopedThing();
}


[generic@sentinel ~]$ g++ test.cpp -o test -lboost_thread -Wall
test.cpp: In function ‘int main()’:
test.cpp:33: warning: unused variable ‘mst’

[generic@sentinel ~]$ ./test
ab[generic@sentinel ~]$ g++ -v 2>&1 | grep version
gcc version 4.4.5 20110214 (Red Hat 4.4.5-6) (GCC)
15
задан Lightness Races with Monica 14 September 2011 в 15:15
поделиться