[class.mfct] # 11 Classes [[class]](./#class) ## 11.4 Class members [[class.mem]](class.mem#class.mfct) ### 11.4.2 Member functions [class.mfct] [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/classes.tex#L1059) If a member function is attached to the global module and is defined ([[dcl.fct.def]](dcl.fct.def "9.6 Function definitions")) in its class definition, it is inline ([[dcl.inline]](dcl.inline "9.2.8 The inline specifier"))[.](#1.sentence-1) [*Note [1](#note-1)*: A member function is also inline if it is declaredinline, constexpr, or consteval[.](#1.sentence-2) — *end note*] [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/classes.tex#L1069) [*Example [1](#example-1)*: struct X {typedef int T; static T count; void f(T);};void X::f(T t = count) { } The definition of the member function f of class X inhabits the global scope; the notation X​::​f indicates that the function f is a member of class X and in the scope of class X[.](#2.sentence-1) In the function definition, the parameter type T refers to the typedef member T declared in class X and the default argument count refers to the static data member count declared in class X[.](#2.sentence-2) — *end example*] [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/classes.tex#L1090) Member functions of a local class shall be defined inline in their class definition, if they are defined at all[.](#3.sentence-1) [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/classes.tex#L1095) [*Note [2](#note-2)*: A member function can be declared (but not defined) using a typedef for a function type[.](#4.sentence-1) The resulting member function has exactly the same type as it would have if the function declarator were provided explicitly, see [[dcl.fct]](dcl.fct "9.3.4.6 Functions") and [[temp.arg]](temp.arg "13.4 Template arguments")[.](#4.sentence-2) [*Example [2](#example-2)*: typedef void fv();typedef void fvc() const;struct S { fv memfunc1; // equivalent to: void memfunc1();void memfunc2(); fvc memfunc3; // equivalent to: void memfunc3() const;}; fv S::* pmfv1 = &S::memfunc1; fv S::* pmfv2 = &S::memfunc2; fvc S::* pmfv3 = &S::memfunc3; — *end example*] — *end note*]