According to the reference, the name of a non-type template parameter is optional, even when assigning a default value (see (1) and (2)). Therefore these template structs ar
First, we can split declaration from definition. So name in declaration is not really helpful. and name might be used in definition
template struct Foo;
template struct Bar;
template struct Foo {/*..*/};
template struct Bar {/*..*/};
Specialization is a special case of definition.
Then name can be unused, so we might omit it:
template
using always_t = T;
template
struct MyArray, T>
{
MyArray(always_t... v) : /*..*/
};
or used for SFINAE
template
struct some_sized_type;