A function shall be defined only in namespace or class scope.
The type of a parameter or the return type for a function
definition shall not be
a (possibly cv-qualified) class type that is
incomplete or abstract within the function body
unless the function is deleted ([dcl.fct.def.delete]).
The function-local predefined variable __func__ is
defined as if a definition of the form
staticconstchar __func__[]="function-name";
had been provided, where function-name is an implementation-defined string.
It is unspecified whether such a variable has an address
distinct from that of any other object in the program.85
[Example 2: struct S {
S(): s(__func__){}// OKconstchar* s;
};
void f(constchar* s = __func__); // error: __func__ is undeclared — end example]