The C++20 standard introduced the notion of concepts and requirements, a typical instance of which looks something like this:
1: template <typename T> 2: requires 3: requires (T t) { 4: { ++t; } 5: } 6: && std::is_integral<T> 7: int foo();
Line 1 is assigned the familiar topmost-intro
. Line 2 gets
topmost-intro-cont
, being the keyword which introduces a
requires clause. Lines 3, 6, and 7 are assigned the syntax
constraint-cont
, being continuations of the requires clause
started on line 2. Lines 4 and 5 get the syntaxes
defun-block-intro
and defun-close
, being analyzed as
though part of a function.
Note that the requires
on Line 3 begins a requires
expression, not a a requires clause, hence its components are not
assigned constraint-cont
. See
https://en.cppreference.com/w/cpp/language/requires.