Unless otherwise specified,
each function, and each specialization of any function template,
specified in this header
is a designated addressable function ([namespace.std]).
When a function or function template specialization F specified in this header
throws a meta::exceptionE,
E.from() is a reflection representing F and
E.where() is a source_location
representing from where the call to F originated.
The behavior of any function specified in namespace std::meta is
implementation-defined
when a reflection of a construct not otherwise specified by this document
is provided as an argument.
Many of the functions specified in namespace std::meta
have semantics that can be affected by
the completeness of class types represented by reflection values.
For such functions,
for any reflection r such that dealias(r)
represents a specialization of a templated class with a reachable definition,
the specialization is implicitly instantiated ([temp.inst]).
[Example 1: template<class T>struct X {
T mem;
};
static_assert(size_of(^^X<int>)==sizeof(int)); // instantiates X<int> — end example]
Any function in namespace std::meta
whose return type is string_view or u8string_view
returns an object V such that
V.data()[V.size()] equals '\0'.
Each element of the range
V.data()+[0, V.size()]
is a potentially non-unique object with static storage duration that
is usable in constant expressions ([intro.object], [expr.const]);
a pointer to such an element is not suitable for use as
a template argument for a constant template parameter of
pointer type ([temp.arg.nontype]).
[Example 2: struct C {};
constexpr string_view sv = identifier_of(^^C);
static_assert(sv =="C");
static_assert(sv.data()[0]=='C');
static_assert(sv.data()[1]=='\0');
— end example]