Почему lock_guard на мьютексной ссылке выдает C26110 - PullRequest
1 голос
/ 05 ноября 2019

Следующий код в проекте 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»

Почему это так? Передача мьютекса в качестве ссылки не работает?

1 Ответ

0 голосов
/ 05 ноября 2019

На основании результатов компиляции Алана и комментария rustyx я отвечу на свой собственный вопрос:

Вероятно, это ошибка анализа кода в Visual Studio. Похоже, C26110 не может распознать мьютекс по ссылке. О проблеме сообщили здесь , и я добавил свой минимальный пример в качестве комментария. Проблема сохраняется и в самой последней версии 16.3.7

...