The inline specifier indicates to
the implementation that inline substitution of the function body at the
point of call is to be preferred to the usual function call mechanism.
An implementation is not required to perform this inline substitution at
the point of call; however, even if this inline substitution is omitted,
the other rules for inline functions specified in this subclause shall
still be respected.
The inline specifier shall not appear on a block scope declaration or
on the declaration of a function parameter.
If the inline specifier is used in a friend function declaration, that
declaration shall be a definition or the function shall have previously
been declared inline.
If a definition of a function or variable is reachable
at the point of its
first declaration as inline, the program is ill-formed.
If a function or variable
with external or module linkage
is declared inline in one definition domain,
an inline declaration of it shall be reachable
from the end of every definition domain in which it is declared;
no diagnostic is required.
An inline function or variable
with external or module linkage
can be defined in multiple translation units ([basic.def.odr]),
but is one entity with one address.
A type or static variable
defined in the body of such a function
is therefore a single entity.