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.96
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.
An inline function or variable shall be defined in every translation unit in which
it is odr-used and shall have exactly the same definition in every
case ([basic.def.odr]).
A call to the inline function or a use of the inline variable may be encountered before its definition
appears in the translation unit.
—end note
]
If the definition of a function or variable appears in a translation unit before its
first declaration as inline, the program is ill-formed.
If a function or variable
with external linkage is declared inline in one translation unit, it
shall be declared inline in all translation units in which it appears;
no diagnostic is required.
An inline function or variable with external
linkage shall have the same address in all translation units.