diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format index 0e40bce5c15763e4fc8647fe067fa7ad80eb49a3..72b6b450ad162f53d2304f61275bc4ee19e0a776 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<const _CharT[_Nm], _CharT> - { - 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 _Out> - 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<typename _Traits, typename _Alloc> struct formatter<basic_string<char, _Traits, _Alloc>, char> { diff --git a/libstdc++-v3/testsuite/std/format/formatter/requirements.cc b/libstdc++-v3/testsuite/std/format/formatter/requirements.cc index 3bff8bdbd5d65e9d1a712896f0bae90a9398aa10..7d95f7fafe98456c43ac83337133312070e73b39 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<Ferr> ); static_assert( ! std::is_copy_assignable_v<Ferr> ); static_assert( ! std::is_move_assignable_v<Ferr> ); + + // LWG 3833. Remove specialization + // template<size_t N> struct formatter<const charT[N], charT> + using Farr = std::format_context::formatter_type<const char[1]>; + static_assert( ! std::is_default_constructible_v<Farr> ); + static_assert( ! std::is_copy_constructible_v<Farr> ); + static_assert( ! std::is_move_constructible_v<Farr> ); + static_assert( ! std::is_copy_assignable_v<Farr> ); + static_assert( ! std::is_move_assignable_v<Farr> ); } int main()