Следующий код в проекте Visual Studio Professional 2019 (версия 16.3.6) выдает предупреждение:
#include <thread>
#include <future>
class Foo {
public:
mutable std::recursive_mutex _writingMutex;
std::recursive_mutex& writingMutex() const { return _writingMutex; }
};
int main()
{
Foo a;
std::lock_guard<std::recursive_mutex> lock(a.writingMutex()); // produces C26110
std::lock_guard<std::recursive_mutex> lock2(a._writingMutex); // no warning
}
Первая блокировка выдает предупреждение C26110 :
Предупреждение C26110 Абоненту не удалось удержать блокировку «lock» перед вызовом функции «std :: lock_guard :: ~ lock_guard»
Почему это так? Передача мьютекса в качестве ссылки не работает?