#include <mutex>
class Foo
{
private:
std::mutex lock_;
public:
Foo() = default;
~Foo() = default;
void bad();
void good();
};
void Foo::bad()
{
std::lock_guard<std::mutex>(lock_);
}
void Foo::good()
{
std::lock_guard<std::mutex>(this->lock_);
}
int main()
{
return 0;
}
I2luY2x1ZGUgPG11dGV4PgoKY2xhc3MgRm9vCnsKIHByaXZhdGU6CiAgc3RkOjptdXRleCBsb2NrXzsKCiBwdWJsaWM6CiAgRm9vKCkgPSBkZWZhdWx0OwogIH5Gb28oKSA9IGRlZmF1bHQ7CgogIHZvaWQgYmFkKCk7CiAgdm9pZCBnb29kKCk7Cn07Cgp2b2lkIEZvbzo6YmFkKCkKewogIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4Pihsb2NrXyk7Cn0KCnZvaWQgRm9vOjpnb29kKCkKewogIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4Pih0aGlzLT5sb2NrXyk7Cn0KCmludCBtYWluKCkKewogIHJldHVybiAwOwp9Cg==
prog.cpp: In member function 'void Foo::bad()':
prog.cpp:18:36: error: no matching function for call to 'std::lock_guard<std::mutex>::lock_guard()'
std::lock_guard<std::mutex>(lock_);
^
In file included from prog.cpp:1:0:
/usr/include/c++/5/mutex:379:7: note: candidate: std::lock_guard<_Mutex>::lock_guard(std::lock_guard<_Mutex>::mutex_type&, std::adopt_lock_t) [with _Mutex = std::mutex; std::lock_guard<_Mutex>::mutex_type = std::mutex]
lock_guard(mutex_type& __m, adopt_lock_t) : _M_device(__m)
^
/usr/include/c++/5/mutex:379:7: note: candidate expects 2 arguments, 0 provided
/usr/include/c++/5/mutex:376:16: note: candidate: std::lock_guard<_Mutex>::lock_guard(std::lock_guard<_Mutex>::mutex_type&) [with _Mutex = std::mutex; std::lock_guard<_Mutex>::mutex_type = std::mutex]
explicit lock_guard(mutex_type& __m) : _M_device(__m)
^
/usr/include/c++/5/mutex:376:16: note: candidate expects 1 argument, 0 provided