Атрибут C++: maybe_unused (начиная с C++17)
Подавляет предупреждения о неиспользуемых сущностях.
Синтаксис
[[maybe_unused]] |
Пояснение
Этот атрибут может присутствовать в объявлении следующих сущностей:
-
класс:
struct [[maybe_unused]] S; -
typedef, включая сущности, объявленные с помощью объявления псевдонима:[[maybe_unused]] typedef S* PS;,using PS [[maybe_unused]] = S*; - переменная, включая статический член данных:
[[maybe_unused]] int x; -
нестатический член данных:
union U { [[maybe_unused]] int n; };, -
функция:
[[maybe_unused]] void f(); -
перечисление:
enum [[maybe_unused]] E {}; - элемент перечисления:
enum { A [[maybe_unused]], B [[maybe_unused]] = 42 }; -
структурированная привязка:
[[maybe_unused]] auto [a, b] = std::make_pair(42, 0.23);
| (начиная с C++26) |
Для сущностей, объявленных [[maybe_unused]], если эти сущности или их структурированные привязки не используются, компилятор не выдает предупреждение о неиспользуемых сущностях.
| Для меток, объявленных | (начиная с C++26) |
Пример
#include <cassert>
[[maybe_unused]] void f([[maybe_unused]] bool thing1,
[[maybe_unused]] bool thing2)
{
[[maybe_unused]] lbl: // the label “lbl” is not used, no warning
[[maybe_unused]] bool b = not false and not true;
assert(b); // in release mode, assert is compiled out, and “b” is unused
// no warning because it is declared [[maybe_unused]]
} // parameters “thing1” and “thing2” are not used, no warning
int main() {}
Отчеты об ошибках
Следующие отчеты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применяется к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| CWG 2360 | C++17 | нельзя было применять [[maybe_unused]] к структурированным привязкам | разрешено |
Ссылки
- Стандарт C++23 (ISO/IEC 14882:2024):
- 9.12.8 Атрибут maybe_unused [dcl.attr.unused]
- Стандарт C++20 (ISO/IEC 14882:2020):
- 9.12.7 Атрибут maybe_unused [dcl.attr.unused]
- Стандарт C++17 (ISO/IEC 14882:2017):
- 10.6.6 Атрибут maybe_unused [dcl.attr.unused]
См. также
Документация по C для maybe_unused |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/language/attributes/maybe_unused