C++ Logo

std-discussion

Advanced search

Re: C++ 20: Member templates. Is there a typo in the following example?

From: Tom Honermann <tom_at_[hidden]>
Date: Fri, 23 Aug 2019 23:55:00 -0400
On 8/21/19 11:41 AM, Vladimir Grigoriev via Std-Discussion wrote:
> In the p.#2 of the section "13.6.2 Member templates" there is the
> following example
>
> 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.
A definition is not required for compilation to succeed. A definition
is required (somewhere) for the final program to link successfully.
>
> 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
>


Received on 2019-08-23 22:57:04