aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2023-03-22 13:01:07 +0000
committerJonathan Wakely <jwakely@redhat.com>2023-03-22 17:48:20 +0000
commitf2e70da638b4f6ba868ff07ab2123cad4fd9fd02 (patch)
treebcbe7aeb447b374969dcf1f9cc3f6b80f29e8cb4
parent924d990425d29ef39f3faac49d4a3772e4302c96 (diff)
downloadgcc-f2e70da638b4f6ba868ff07ab2123cad4fd9fd02.zip
gcc-f2e70da638b4f6ba868ff07ab2123cad4fd9fd02.tar.gz
gcc-f2e70da638b4f6ba868ff07ab2123cad4fd9fd02.tar.bz2
libstdc++: Remove std::formatter<const charT[N], charT> specialization
This was approved in Issaquah as LWG 3833. libstdc++-v3/ChangeLog: * include/std/format (formatter<const charT[N], charT>): Do not define partial speclialization, as per LWG 3833. * testsuite/std/format/formatter/requirements.cc: Check it.
-rw-r--r--libstdc++-v3/include/std/format22
-rw-r--r--libstdc++-v3/testsuite/std/format/formatter/requirements.cc9
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<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 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<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()