- 宣言:
template <parameter-list> requires-clause attr specifiers identifier attr (parameter-list) cv ref except attr-for-type -> trailing requires-clause- attr:関数に付与される属性
- specifiers:指定子
inline,virtual,explicit,friend,constexpr,consteval,static,extern,auto,decltype,typename,const,volatileなど
- cv:
const,volatile - ref:
&,&& - except:
noexcept - attr-for-type:型に付与される属性?(詳細不明)
- trailing:specifiersを
autoとしたときの戻り値型 - requires-clause:
requires
- 定義:
declarator virt-specifier-seq function-body- declarator:宣言
- virt-specifier-seq:
override、final - function-body:
{}、try {} catch() {}、= delete;、= default;
おまけ:attributeの位置
- 変数・関数:指定子の前、または、識別子の後
- クラス・列挙体・名前空間:キーワードの後
- 列挙子・エイリアス:識別子の後
- 制御構文:キーワードの前
- ラベル・文:それの前
[[likely]]はここ(ifから見ると後に付いているようにも見えるが)
おまけのおまけ
alignasの位置は属性と同じ(と考えて良いらしい)