https://gcc.gnu.org/g:e085eeb59c9a77948492c7197d6eda6ec215361e
commit r13-9130-ge085eeb59c9a77948492c7197d6eda6ec215361e Author: Jonathan Wakely <[email protected]> Date: Thu Jul 25 13:52:12 2024 +0100 libstdc++: Remove std::basic_format_args default constructor (LWG 4106) 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. (cherry picked from commit 5be55447e256302324f38f04316a437909ae5847) Diff: --- libstdc++-v3/include/std/format | 2 -- libstdc++-v3/testsuite/std/format/arguments/args.cc | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format index e00cfbe65c53..ed5bcf01504f 100644 --- a/libstdc++-v3/include/std/format +++ b/libstdc++-v3/include/std/format @@ -3292,8 +3292,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; diff --git a/libstdc++-v3/testsuite/std/format/arguments/args.cc b/libstdc++-v3/testsuite/std/format/arguments/args.cc index e2e7a3e7ee54..cefd0b944717 100644 --- a/libstdc++-v3/testsuite/std/format/arguments/args.cc +++ b/libstdc++-v3/testsuite/std/format/arguments/args.cc @@ -4,6 +4,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) {
