]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Remove std::basic_format_args default constructor (LWG 4106)
authorJonathan Wakely <jwakely@redhat.com>
Thu, 25 Jul 2024 12:52:12 +0000 (13:52 +0100)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sun, 28 Jul 2024 17:05:58 +0000 (19:05 +0200)
There's no valid use case for default constructing this type, so the
committee approved removing the default constructor.

libstdc++-v3/ChangeLog:

* include/std/format (basic_format_args): Remove default
constructor, as per LWG 4106.
* testsuite/std/format/arguments/args.cc: Check it isn't default
constructible.

libstdc++-v3/include/std/format
libstdc++-v3/testsuite/std/format/arguments/args.cc

index 16cee0d3c74dc9553af2fb1a6d6f419dcdb3846b..8f6a82a1fd41a4eeba505ae842d1094b87cab25c 100644 (file)
@@ -3667,8 +3667,6 @@ namespace __format
        { return {_Format_arg::template _S_to_enum<_Args>()...}; }
 
     public:
-      basic_format_args() noexcept = default;
-
       template<typename... _Args>
        basic_format_args(const _Store<_Args...>& __store) noexcept;
 
index eba129ff89442f98ffa02a6f5eda8f283ec8d2ac..16ca71caecbe0a38538f45354419c2e73a426005 100644 (file)
@@ -3,6 +3,10 @@
 #include <format>
 #include <testsuite_hooks.h>
 
+// LWG 4106. basic_format_args should not be default-constructible
+static_assert( ! std::is_default_constructible_v<std::format_args> );
+static_assert( ! std::is_default_constructible_v<std::wformat_args> );
+
 template<typename Ctx, typename T>
 bool equals(std::basic_format_arg<Ctx> fmt_arg, T expected) {
   return std::visit_format_arg([=](auto arg_val) {