literal type is defined in 3.9/10:
A type is a literal type if it is:
void
; ora scalar type; or
a reference type; or
an array of literal type; or
a class type (Clause 9) that has all of the following properties:
it has a trivial destructor,
it is an aggregate type (8.5.1) or has at least one
constexpr
constructor or constructor template that is not a copy or move constructor, andall of its non-static data members and base classes are of non-volatile literal types
So your struct point
is a literal type and your sample code is valid C++1y.
As to why constexpr
functions are restricted to variables of literal type, they are the only types that are guaranteed to be interpretable at compile time.