From f2e70da638b4f6ba868ff07ab2123cad4fd9fd02 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 22 Mar 2023 13:01:07 +0000 Subject: [PATCH] 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. --- libstdc++-v3/include/std/format | 22 ---------------------- .../testsuite/std/format/formatter/requirements.cc | 9 +++++++++ 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format index 0e40bce..72b6b45 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 3bff8bd..7d95f7f 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() -- 2.7.4