[temp.mem.func] (original) (raw)

13 Templates [temp]

13.7 Template declarations [temp.decls]

13.7.2 Class templates [temp.class]

13.7.2.2 Member functions of class templates [temp.mem.func]

A member function of a class template may be defined outside of the class template definition in which it is declared.

[Example 1: template<class T> class Array { T* v;int sz;public: explicit Array(int); T& operator[](int); T& elem(int i) { return v[i]; } };

declares three member functions of a class template.

The subscript function can be defined like this:template<class T> T& Array<T>::operator[](int i) { if (i<0 || sz<=i) error("Array: range error");return v[i];}

A constrained member function can be defined out of line:template<typename T> concept C = requires { typename T::type;};template<typename T> struct S { void f() requires C<T>;void g() requires C<T>;};template<typename T> void S<T>::f() requires C<T> { } template<typename T> void S<T>::g() { }

— _end example_]

Thetemplate-argument_s_for a member function of a class template are determined by thetemplate-argument_s_of the type of the object for which the member function is called.

[Example 2:

Thetemplate-argumentforArray<T>​::​operator[]will be determined by theArrayto which the subscripting operation is applied.

Array<int> v1(20); Array<dcomplex> v2(30); v1[3] = 7; v2[3] = dcomplex(7,8); — _end example_]