On Sun, 2 Nov 2025, Jason Merrill wrote:

> Tested x86_64-pc-linux-gnu, OK for trunk?
> 
> -- 8< --
> 
> Since the implementation namespaces __detail and __exception_ptr aren't
> exported from std, ADL can't find these functions there.  Adding friend
> declarations makes it work.

I thought Nathaniel's module ADL fixes (for 121705 and/or 117658) would
make this unnecessary?

> 
> libstdc++-v3/ChangeLog:
> 
>       * include/bits/quoted_string.h: Add ADL friends.
>       * libsupc++/exception_ptr.h: Add ADL friend.
> ---
>  libstdc++-v3/include/bits/quoted_string.h | 23 +++++++++++++++++++++++
>  libstdc++-v3/libsupc++/exception_ptr.h    |  4 ++++
>  2 files changed, 27 insertions(+)
> 
> diff --git a/libstdc++-v3/include/bits/quoted_string.h 
> b/libstdc++-v3/include/bits/quoted_string.h
> index 3a828d5eab9..9a51aa367fe 100644
> --- a/libstdc++-v3/include/bits/quoted_string.h
> +++ b/libstdc++-v3/include/bits/quoted_string.h
> @@ -61,6 +61,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>       _Quoted_string&
>       operator=(_Quoted_string&) = delete;
>  
> +     // Friends for ADL with module std.
> +     template<typename _CharT2, typename _Traits>
> +     friend std::basic_ostream<_CharT2, _Traits>&
> +     operator<<(std::basic_ostream<_CharT2, _Traits>& __os,
> +                const _Quoted_string<const _CharT2*, _CharT2>& __str);
> +
> +     template<typename _CharT2, typename _Traits, typename _String2>
> +     friend std::basic_ostream<_CharT2, _Traits>&
> +     operator<<(std::basic_ostream<_CharT2, _Traits>& __os,
> +                const _Quoted_string<_String2, _CharT2>& __str);
> +
> +     template<typename _CharT2, typename _Traits, typename _Alloc>
> +     friend std::basic_istream<_CharT2, _Traits>&
> +     operator>>(std::basic_istream<_CharT2, _Traits>& __is,
> +                const _Quoted_string<basic_string<_CharT2, _Traits, _Alloc>&,
> +                _CharT2>& __str);
> +
>       _String _M_string;
>       _CharT _M_delim;
>       _CharT _M_escape;
> @@ -78,6 +95,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>       _Quoted_string&
>       operator=(_Quoted_string&) = delete;
>  
> +     // Friend for ADL with module std.
> +     template<typename _CharT2, typename _Traits2, typename _String2>
> +     friend std::basic_ostream<_CharT2, _Traits2>&
> +     operator<<(std::basic_ostream<_CharT2, _Traits2>& __os,
> +                const _Quoted_string<_String2, _CharT2>& __str);
> +
>       basic_string_view<_CharT, _Traits> _M_string;
>       _CharT _M_delim;
>       _CharT _M_escape;
> diff --git a/libstdc++-v3/libsupc++/exception_ptr.h 
> b/libstdc++-v3/libsupc++/exception_ptr.h
> index f673a334333..76482db3756 100644
> --- a/libstdc++-v3/libsupc++/exception_ptr.h
> +++ b/libstdc++-v3/libsupc++/exception_ptr.h
> @@ -214,6 +214,10 @@ namespace std _GLIBCXX_VISIBILITY(default)
>        { return __x._M_exception_object != __y._M_exception_object; }
>  #endif
>  
> +      // Friend for ADL with module std.
> +      friend _GLIBCXX26_CONSTEXPR void
> +      swap(exception_ptr& __lhs, exception_ptr& __rhs);
> +
>        const class std::type_info*
>        __cxa_exception_type() const _GLIBCXX_USE_NOEXCEPT
>       __attribute__ ((__pure__));
> 
> base-commit: 2be505ace7e5e29a29ab53025762cf1a100a6d76
> -- 
> 2.51.0
> 
> 

Reply via email to