In the p.#2 of the section "13.6.2 Member templates" there is the following exampleA definition is not required for compilation to succeed. A definition is required (somewhere) for the final program to link successfully.
template <class T>struct A {
void f(int);
template <class T2> void f(T2);
};
template <> void A<int>::f(int) { } // non-template member function
template <> template <> void A<int>::f<>(int) { } // member function template specialization
int main() {
A<char> ac;
ac.f(1); // non-template
ac.f(’c’); // template
ac.f<>(1); // template
}
However there is no definition for example for the specialization of the non-template function for A<char>. So the code is invalid. That is the compiler will issue an error.
Should the template specializations be done in this example for A<char> instead of A<int>?
No. The point of the example is to demonstrate the syntax needed
to declare and call specific specializations of those two class
template members. The fact that definitions of the two members
cannot be (implicitly) instantiated for the A<char>
specialization within that translation unit is immaterial.
Tom.
With best regards,
Vlad from Moscow
You can meet me at http://cpp.forum24.ru/ or www.stackoverflow.com or http://ru.stackoverflow.com