Concept Grammar

concept specifiers concept identifier < (identifier % ,) > refinement? where‑constraint? { concept‑body }
refinement : qualified‑id < (identifier % ,) >
concept‑body (concept‑body‑constraint | axiom)*
concept‑body‑constraint type‑name‑constraint | signature‑constraint | embedded‑constraint
type‑name‑constraint typename type‑expr ;
signature‑constraint constructor‑constraint | destructor‑constraint | member‑function‑constraint | function‑constraint
constructor‑constraint explicit? identifier parameter‑list ;
destructor‑constraint ~ identifier ( ) ;
member‑function‑constraint type‑expr identifier . function‑group‑id parameter‑list ;
function‑constraint type‑expr function‑group‑id parameter‑list ;
embedded‑constraint where‑constraint ;
where‑constraint where constraint‑expr
constraint‑expr disjunctive‑constraint‑expr
disjunctive‑constraint‑expr conjunctive‑constraint‑expr (or conjunctive‑constraint‑expr)*
conjunctive‑constraint‑expr primary‑constraint‑expr (and primary‑constraint‑expr)*
primary‑constraint‑expr ( constraint‑expr ) | atomic‑constraint‑expr
atomic‑constraint‑expr predicate‑constraint‑expr | is‑constraint | multiparam‑constraint
predicate‑constraint‑expr invoke‑expr
is‑constraint type‑expr is concept‑or‑type‑name
concept‑or‑type‑name type‑expr
multiparam‑constraint qualified‑id < (type‑expr % ,) >
axiom axiom identifier? parameter‑list? { axiom‑body }
axiom‑body axiom‑statement*
axiom‑statement expression ;