2 A function declaration (8.3.5, 9.3, 11.3) with an inline speciﬁer declares an inline function. The inline
speciﬁer 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 deﬁned by 7.1.2 shall still be respected.
3 A function deﬁned within a class deﬁnition is an inline function. The inline speciﬁer shall not appear on
a block scope function declaration.* If the inline speciﬁer is used in a friend declaration, that declaration
shall be a deﬁnition or the function shall have previously been declared inline.
4 An inline function shall be deﬁned in every translation unit in which it is odr-used and shall have exactly
the same deﬁnition in every case (3.2). [ Note: A call to the inline function may be encountered before its
deﬁnition appears in the translation unit. — end note ] If the deﬁnition of a function appears in a translation
unit before its ﬁrst declaration as inline, the program is ill-formed. If a function 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 with external linkage shall have the same address in all
translation units. A static local variable in an extern inline function always refers to the same object.
A string literal in the body of an extern inline function is the same object in diﬀerent translation units.
[ Note: A string literal appearing in a default argument is not in the body of an inline function merely
because the expression is used in a function call from that inline function. — end note ] A type deﬁned
within the body of an extern inline function is the same type in every translation unit.
* The inline keyword has no eﬀect on the linkage of a function.