Expressions and statements
ES.84
Не пытайтесь объявить локальную переменную без имени
Причина
Такого не существует. То, что выглядит для человека как переменная без имени, является для компилятора оператором, состоящим из временного объекта, который немедленно выходит из области видимости.
Пример (плохой)
void f()
{
lock_guard<mutex>{mx}; // Плохо
// ...
}
Это объявляет безымянный объект lock_guard, который немедленно выходит из области видимости на точке с запятой. Это нередкая ошибка. В частности, данный конкретный пример может привести к труднообнаруживаемым состояниям гонки.
Примечание
Безымянные аргументы функций допустимы.
Контроль
Отмечать операторы, являющиеся только временным объектом.