On Wed, 15 Jul 2026 at 16:28, Jakub Jelinek <[email protected]> wrote:
>
> On Wed, Jul 15, 2026 at 03:47:55PM +0100, Jonathan Wakely wrote:
> > I wonder if we should do:
> >
> > #if __has_cpp_attribute(_Clang::__no_specializations__)
> > # define _GLIBCXX_NO_SPECIALIZATIONS(T) \
> >   [[_Clang::__no_specializations__ ("explicit or partial specialization of 
> > std::" \
> >                                   #T)]] T
> > #else
> > # define _GLIBCXX_NO_SPECIALIZATIONS(T) T
> > #endif
> >
> > And then we would not have to repeat the type:
> >
> >   class _GLIBCXX_NO_SPECIALIZATIONS(tuple) {
> >
> > But that's minor and could be changed later.
>
> I also thought that it would be nice to move it out from the actual
> class definition to forward declaration, so have
>   // _GLIBCXX_RESOLVE_LIB_DEFECTS
>   // 3990. Program-defined specializations of std::tuple and std::variant
>   // can't be properly supported
>   template<typename... _Types>
>   class _GLIBCXX_NO_SPECIALIZATIONS (std::variant) variant;
> ...
>   template<typename... _Types>
>   class variant
>   : private __detail::__variant::_Variant_base<_Types...>,
>     private _Enable_copy_move<
>      __detail::__variant::_Traits<_Types...>::_S_copy_ctor,
> ...

Yes, that would be nice.

> but unfortunately that works only with g++ trunk, not with clang++,
> which then completely ignores the attribute.

Bah. I'll report a bug.

Reply via email to