Я использую защиту от глупости, она работает, но выдает предупреждение о том, что переменная не используется:
warning: unused variable ‘g’ [-Wunused-variable]
Код:
folly::ScopeGuard g = folly::makeGuard([&] {close(sock);});
Как избежать такого предупреждения?
Вы можете отключить это предупреждение -Wno-unused-variable
хотя это немного опасно (вы теряете все действительно не используется переменные).
Одним из возможных решений является на самом деле использование переменная, но ничего не делать с ней. Например, в случае аннулирования:
(void) g;
который можно превратить в макрос:
#define IGNORE_UNUSED(x) (void) x;
Кроме того, вы можете использовать повысить подход: объявить шаблонную функцию, которая ничего не делает, и использовать ее
template <typename T>
void ignore_unused (T const &) { }
...
folly::ScopeGuard g = folly::makeGuard([&] {close(sock);});
ignore_unused(g);
Вы можете просто пометить переменную как неиспользуемую:
folly::ScopeGuard g [[gnu::unused]] = folly::makeGuard([&] {close(sock);});
Или брось это, чтобы аннулировать
folly::ScopeGuard g = folly::makeGuard([&] {close(sock);});
(void)g;
И то и другое не очень хорошо, но, по крайней мере, это позволяет вам хранить предупреждения.