Метод 1: Используйте директиву #pragma warning
.
#pragma warning
позволяет выборочно изменять поведение предупреждающих сообщений компилятора.
#pragma warning( push )
#pragma warning( disable : 4705 ) // replace 4705 with warning number
ScopeGuard close_guard = MakeGuard( &close_file, file );
#pragma warning( pop )
Этот код сохраняет текущее состояние предупреждения, затем отключает предупреждение для определенного кода предупреждения и затем восстанавливает последнее сохраненное состояние предупреждения.
Метод 2: Используйте обходной путь, подобный следующему. Visual Studio будет счастлив, как и вы. Этот обходной путь используется во многих образцах Microsoft, а также в других проектах.
ScopeGuard close_guard = MakeGuard( &close_file, file );
close_guard;
Или вы можете создать #define
для обхода предупреждения.
#define UNUSED_VAR(VAR) VAR
...
ScopeGuard close_guard = MakeGuard( &close_file, file );
UNUSED_VAR(close_guard);
Некоторые пользователи заявили, что представленный код не будет работать, поскольку ScopeGuard является typedef. Это предположение неверно.
http://www.ddj.com/cpp/184403758
Согласно стандарту C ++,
ссылка инициализирована с временным
значение делает это временное значение живым
за время существования ссылки
сам по себе.