attribute specifier sequence(since C++11)
Introduces implementation-defined attributes for types, objects, code, etc.
[[
attr]]
[[
attr1, attr2, attr3(
args)
]]
[[
namespace::
attr(
args)
]]
alignas_specifier
Formally, the syntax is
[[ attribute-list ]]
|
(since C++11) | ||||||||
[[ using attribute-namespace : attribute-list ]]
|
(since C++17) | ||||||||
where attribute-list is a comma-separated sequence of zero or more attributes (possibly ending with an ellipsis ...
indicating a pack expansion)
identifier | (1) | ||||||||
attribute-namespace :: identifier
|
(2) | ||||||||
identifier ( argument-list )
|
(3) | ||||||||
attribute-namespace :: identifier ( argument-list )
|
(4) | ||||||||
If [[using CC: opt(1), debug]] // same as [[CC::opt(1), CC::debug]] [[using CC: CC::opt(1)]] // error: cannot combine using and scoped attribute |
(since C++17) |
[[noreturn]]
|
indicates that the function does not return |
[[carries_dependency]]
|
indicates that dependency chain in release-consume std::memory_order propagates in and out of the function |
[[deprecated]] (C++14)[[deprecated("reason")]] (C++14)
|
indicates that the use of the name or entity declared with this attribute is allowed, but discouraged for some reason |
[[fallthrough]] (C++17)
|
indicates that the fall through from the previous case label is intentional and should not be diagnosed by a compiler that warns on fall-through |
[[nodiscard]] (C++17)[[nodiscard("reason")]] (C++20)
|
encourages the compiler to issue a warning if the return value is discarded |
[[maybe_unused]] (C++17)
|
suppresses compiler warnings on unused entities, if any |
[[likely]] (C++20)[[unlikely]] (C++20)
|
indicates that the compiler should optimize for the case where a path of execution through a statement is more or less likely than any other path of execution |
[[no_unique_address]] (C++20)
|
indicates that a non-static data member need not have an address distinct from all other non-static data members of its class |
[[optimize_for_synchronized]] (TM TS)
|
indicates that the function definition should be optimized for invocation from a synchronized statement |
Example
[[gnu::always_inline]] [[gnu::hot]] [[gnu::const]] [[nodiscard]] inline int f(); // declare f with four attributes [[gnu::always_inline, gnu::const, gnu::hot, nodiscard]] int f(); // same as above, but uses a single attr specifier that contains four attributes // C++17: [[using gnu : const, always_inline, hot]] [[nodiscard]] int f[[gnu::always_inline]](); // an attribute may appear in multiple specifiers int f() { return 0; } int main() { }