From: Jonathan Wakely Date: Wed, 22 Mar 2023 13:01:07 +0000 (+0000) Subject: libstdc++: Remove std::formatter specialization X-Git-Tag: basepoints/gcc-14~396 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f2e70da638b4f6ba868ff07ab2123cad4fd9fd02;p=thirdparty%2Fgcc.git libstdc++: Remove std::formatter specialization This was approved in Issaquah as LWG 3833. libstdc++-v3/ChangeLog: * include/std/format (formatter): Do not define partial speclialization, as per LWG 3833. * testsuite/std/format/formatter/requirements.cc: Check it. --- diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format index 0e40bce5c157..72b6b450ad16 100644 --- a/libstdc++-v3/include/std/format +++ b/libstdc++-v3/include/std/format @@ -1882,28 +1882,6 @@ namespace __format __format::__formatter_str<_CharT> _M_f; }; - template<__format::__char _CharT, size_t _Nm> - struct formatter - { - formatter() = default; - - [[__gnu__::__always_inline__]] - constexpr typename basic_format_parse_context<_CharT>::iterator - parse(basic_format_parse_context<_CharT>& __pc) - { return _M_f.parse(__pc); } - - template - typename basic_format_context<_Out, _CharT>::iterator - format(const _CharT (&__u)[_Nm], - basic_format_context<_Out, _CharT>& __fc) const - { return _M_f.format({__u, _Nm}, __fc); } - - constexpr void set_debug_format() noexcept { _M_f.set_debug_format(); } - - private: - __format::__formatter_str<_CharT> _M_f; - }; - template struct formatter, char> { diff --git a/libstdc++-v3/testsuite/std/format/formatter/requirements.cc b/libstdc++-v3/testsuite/std/format/formatter/requirements.cc index 3bff8bdbd5d6..7d95f7fafe98 100644 --- a/libstdc++-v3/testsuite/std/format/formatter/requirements.cc +++ b/libstdc++-v3/testsuite/std/format/formatter/requirements.cc @@ -51,6 +51,15 @@ test_specializations() // [format.formatter.spec] static_assert( ! std::is_move_constructible_v ); static_assert( ! std::is_copy_assignable_v ); static_assert( ! std::is_move_assignable_v ); + + // LWG 3833. Remove specialization + // template struct formatter + using Farr = std::format_context::formatter_type; + static_assert( ! std::is_default_constructible_v ); + static_assert( ! std::is_copy_constructible_v ); + static_assert( ! std::is_move_constructible_v ); + static_assert( ! std::is_copy_assignable_v ); + static_assert( ! std::is_move_assignable_v ); } int main()