An annotation may be applied to any declaration of a
type,
type alias,
variable,
function,
namespace,
enumerator,
base-specifier, or
non-static data member.
[Example 2: template<class T>[[=T::type()]]void f(T t);
void f(int);
void g(){
f(0); // OK
f('0'); // error, substituting into the annotation results in an invalid expression} — end example]