From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2181) id B7CD13858433; Wed, 22 Mar 2023 17:49:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B7CD13858433 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1679507392; bh=gnH9yqfQxGI3kzlUJBowFcJ21qKl/wdlmM3akbn4XYc=; h=From:To:Subject:Date:From; b=PkVJ6M0ihyzLkxUMH98wrZzm0R+/z04Q5uxltKjHOV2/Rl5zC0ronyKgzy9Ll5T+H qQcmZcJGuh0WMxjxlpM2hwBD1uquOE5C4jLw2crqh5knmGRvJpfQdiVZSetygsO3xv rdAaA1WCq97GxAz89t1KjhIbc2oYSB+i2drt7vxs= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jonathan Wakely To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r13-6811] libstdc++: Remove std::formatter specialization X-Act-Checkin: gcc X-Git-Author: Jonathan Wakely X-Git-Refname: refs/heads/master X-Git-Oldrev: 924d990425d29ef39f3faac49d4a3772e4302c96 X-Git-Newrev: f2e70da638b4f6ba868ff07ab2123cad4fd9fd02 Message-Id: <20230322174952.B7CD13858433@sourceware.org> Date: Wed, 22 Mar 2023 17:49:52 +0000 (GMT) List-Id: https://gcc.gnu.org/g:f2e70da638b4f6ba868ff07ab2123cad4fd9fd02 commit r13-6811-gf2e70da638b4f6ba868ff07ab2123cad4fd9fd02 Author: Jonathan Wakely Date: Wed Mar 22 13:01:07 2023 +0000 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: --- 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 0e40bce5c15..72b6b450ad1 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 3bff8bdbd5d..7d95f7fafe9 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()