Spec-Zone.ru › C++

Атрибут 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);
  • привязка результата: post(r [[maybe_unused]] : this->empty())
(начиная с C++26)

Для сущностей, объявленных [[maybe_unused]], если эти сущности или их структурированные привязки не используются, компилятор не выдает предупреждение о неиспользуемых сущностях.

Для меток, объявленных [[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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API