[PATCH v2] tst-unique4.cc: Add explicit instantiation declaration S<N>::i

H.J. Lu hjl.tools@gmail.com
Tue Dec 31 11:09:54 GMT 2024


On Tue, Dec 31, 2024 at 6:28 PM Florian Weimer <fweimer@redhat.com> wrote:
>
> * H. J. Lu:
>
> > On Mon, Dec 30, 2024 at 6:39 PM Florian Weimer <fweimer@redhat.com> wrote:
> >>
> >> * H. J. Lu:
> >>
> >> > Clang 19 complains:
> >> > tst-unique4.cc:7:16: error: expected unqualified-id
> >> >     7 | extern template<> int S<1>;
> >> >       |                ^
> >> > 1 error generated.
> >>
> >> I should habe looked up the syntax.  It's this:
> >>
> >> extern template class S<1>;
> >
> > tst-unique4.cc:7:17: error: class template 'S' was previously declared
> > as a struct template; this is valid, but may result in linker errors
> > under the Microsoft C++ ABI [-Werror,-Wmismatched-tags]
> >     7 | extern template class S<1>;
> >       |                 ^
> > ./tst-unique4.h:3:8: note: previous use is here
> >     3 | struct S
> >       |        ^
> > tst-unique4.cc:7:17: note: did you mean struct here?
> >     7 | extern template class S<1>;
> >       |                 ^~~~~
> >       |                 struct
> > 1 error generated.
>
> Does replacing class with struct work?

No.

tst-unique4.cc:11:20: error: instantiation of variable 'S<2>::i'
required here, but no definition is available
[-Werror,-Wundefined-var-template]
   11 |     S<1>::i, S<2>::i, S<3>::i, S<4>::i, S<5>::i, S<6>::i,
S<7>::i, S<8>::i,
      |                    ^
./tst-unique4.h:5:14: note: forward declaration of template entity is here
    5 |   static int i;
      |              ^
tst-unique4.cc:11:20: note: add an explicit instantiation declaration
to suppress this warning if 'S<2>::i' is explicitly instantiated in
another translation unit
   11 |     S<1>::i, S<2>::i, S<3>::i, S<4>::i, S<5>::i, S<6>::i,
S<7>::i, S<8>::i,
      |                    ^
1 error generated.

> Thanks,
> Florian
>


-- 
H.J.


More information about the Libc-alpha mailing list