Under gcc/g++ 4.9 I can write:
int x __attribute__((unused)) = f();
to indicate that x is intentionally unused.
Is it possible to d
Yes, use [[gnu::unused]]
Like already said unused
isn't part of the standard attributes specified by the standard.
The standard allows implementation defined attributes too like the __attribute__
and __declspec
ones to be used with the new syntax. If a compiler doesn't recognize an attribute (a gcc attribute when compiling on MSVC as example) it'll simply be ignored. (probably with a warning)
For gcc you can use the gnu prefix and the C++11 attribute syntax: [[gnu::unused]]
instead of __attribute__((unused))
the same should apply for the other gcc attributes too.
example without gnu prefix
example with gnu prefix
The thing you are referring to is known as attribute specifiers. It is an attempt to standardize various, platform dependent, specifiers:
As you can see in attached doc link, the only specifiers supported in C++11 are:
[[noreturn]]
[[carries_dependency]]
and in C++14:
[[deprecated]]
(also supported as: [[deprecated("reason")]]
)So the answer is: no, it's not possible, using only C++11 features.
If you are not interested only in portable solutions, there might be a way. C++ standard does not limit this list:
Only the following attributes are defined by the C++ standard. All other attributes are implementation-specific.
Various compilers can support some non-standard specifiers. For example, you can read this page in order to find out, that Clang supports:
[[gnu::unused]]
Perhaps your version of GCC also supports this specifier. This page contains a bug report referring to generalized attributes support. [[gnu::unused]]
is also mentioned.
There is [[maybe_unused]]
attribute in C++17. It's implemented in GCC 7, see C++ Standards Support in GCC .
Example from P0212R1 proposal:
[[maybe_unused]] void f([[maybe_unused]] bool thing1,
[[maybe_unused]] bool thing2) {
[[maybe_unused]] bool b = thing1 && thing2;
assert(b);
}