The requires-clause form on alias templates previously emitted
'Syntax error in input(1).' at the using line:
template<typename T> requires Numeric<T> using NumBox = Box<T>;
The type-constraint shorthand was already accepted via the existing
type-constrained template parameter support:
template<Numeric T> using NumBox = Box<T>;
Both forms now parse and wrap identically to an unconstrained alias.
The C++ compiler enforces the constraint when compiling the emitted
wrapper. Wrapping continues to use the documented two-step pattern:
%template(Name) on the underlying template, followed by an empty
%template() for each alias.
New test cases cpp11_alias_templates (focused unconstrained coverage,
including alias-of-alias and a non-type parameter on the underlying
template) and cpp20_alias_template (all three forms plus an unseen
concept best-effort case), with Python and Java runme files.
Assisted-by: Claude Code (Opus 4.7)