Может ли спецификатор атрибута may_unused появиться только один раз и при этом работать?

Мне нравится атрибут [[maybe_unused]], и я часто использую его, когда мне нужно скомпилировать реализации функций только для отладки. Я немного запутался, где его следует использовать при указании аргументов функции-члена как [[maybe_unused]].

Данный:

//Foo.h
class Foo {
    void DebugOnly(Bar& fly);
}

//Foo.cpp
void Foo::DebugOnly(Bar& fly) {
#ifdef _DEBUG
    fly.squish();
#endif
}

Имеет ли значение его указание в обоих местах?

//Foo.h
class Foo {
    void DebugOnly([[maybe_unused]] Bar& fly);
}

//Foo.cpp
void Foo::DebugOnly([[maybe_unused]] Bar& fly) {
#ifdef _DEBUG
    fly.squish();
#endif
}

Или я должен объявить это только в заголовке или файле реализации?

Только заголовок

//Foo.h
class Foo {
    void DebugOnly([[maybe_unused]] Bar& fly);
}

//Foo.cpp
void Foo::DebugOnly(Bar& fly) {
#ifdef _DEBUG
    fly.squish();
#endif
}

Только файл реализации

//Foo.h
class Foo {
    void DebugOnly(Bar& fly);
}

//Foo.cpp
void Foo::DebugOnly([[maybe_unused]] Bar& fly) {
#ifdef _DEBUG
    fly.squish();
#endif
}

Страница на cppreference не различает аргументы функций и только классифицирует их как переменные.


person Casey    schedule 30.05.2021    source источник
comment
Это имеет значение только в объявлении реализации. Добавлять его в декларацию, скорее всего, бессмысленно.   -  person ALX23z    schedule 30.05.2021
comment
@ALX23z Это называется определение.   -  person Maciej Załucki    schedule 31.05.2021