C++ attribute: carries_dependency (since C++11)

From cppreference.com
< cpplrm; | languagelrm; | attributes
Attributes
carries_dependency
(C++11)
(C++14)
(C++17)
(C++20)(C++20)
(C++20)(C++20)(C++20)

Indicates that dependency chain in release-consume std::memory_order propagates in and out of the function, which allows the compiler to skip unnecessary memory fence instructions.

Syntax

[[carries_dependency]]

Explanation

Indicates that dependency chain in release-consume std::memory_order propagates in and out of the function, which allows the compiler to skip unnecessary memory fence instructions.

This attribute may appear in two situations:

1) it may apply to the parameter declarations of a function or lambda-expressions, in which case it indicates that initialization of the parameter carries dependency into lvalue-to-rvalue conversion of that object.
2) It may apply to the function declaration as a whole, in which case it indicates that the return value carries dependency to the evaluation of the function call expression.

This attribute must appear on the first declaration of a function or one of its parameters in any translation unit. If it is not used on the first declaration of a function or one of its parameters in another translation unit, the program is ill-formed; no diagnostic required.

See std::kill_dependency for example usage.