C++ Logo


Advanced search

Subject: Re: C++ 20: Member templates. Is there a typo in the following example?
From: Tom Honermann (tom_at_[hidden])
Date: 2019-08-23 22:55:00

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.


> With best regards,
> Vlad from Moscow
> You can meet me at http://cpp.forum24.ru/ or www.stackoverflow.com or
> http://ru.stackoverflow.com

STD-DISCUSSION list run by herb.sutter at gmail.com

Older Archives on Google Groups