[libcxx-commits] [libcxx] [libc++][format] LWG4106: `basic_format_args` should not be default-constructible (PR #97250)
via libcxx-commits
libcxx-commits at lists.llvm.org
Sun Jun 30 19:23:29 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libcxx
Author: A. Jiang (frederick-vs-ja)
<details>
<summary>Changes</summary>
See [LWG4106](https://cplusplus.github.io/LWG/issue4106) and [P3341R0](https://wg21.link/p3341r0).
The test coverage for the empty state of `basic_format_args` in `get.pass.cpp` is to be completely removed, because the non-default-constructibility is covered in `ctor.pass.cpp`.
---
Full diff: https://github.com/llvm/llvm-project/pull/97250.diff
3 Files Affected:
- (modified) libcxx/include/__format/format_args.h (-2)
- (modified) libcxx/test/std/utilities/format/format.arguments/format.args/ctor.pass.cpp (+2-7)
- (modified) libcxx/test/std/utilities/format/format.arguments/format.args/get.pass.cpp (-5)
``````````diff
diff --git a/libcxx/include/__format/format_args.h b/libcxx/include/__format/format_args.h
index a5fde36a29817..07923570f3893 100644
--- a/libcxx/include/__format/format_args.h
+++ b/libcxx/include/__format/format_args.h
@@ -28,8 +28,6 @@ _LIBCPP_BEGIN_NAMESPACE_STD
template <class _Context>
class _LIBCPP_TEMPLATE_VIS basic_format_args {
public:
- basic_format_args() noexcept = default;
-
template <class... _Args>
_LIBCPP_HIDE_FROM_ABI basic_format_args(const __format_arg_store<_Context, _Args...>& __store) noexcept
: __size_(sizeof...(_Args)) {
diff --git a/libcxx/test/std/utilities/format/format.arguments/format.args/ctor.pass.cpp b/libcxx/test/std/utilities/format/format.arguments/format.args/ctor.pass.cpp
index c0575c545bde3..bb542a8e63ecf 100644
--- a/libcxx/test/std/utilities/format/format.arguments/format.args/ctor.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.arguments/format.args/ctor.pass.cpp
@@ -9,12 +9,12 @@
// <format>
-// basic_format_args() noexcept;
// template<class... Args>
// basic_format_args(const format-arg-store<Context, Args...>& store) noexcept;
#include <format>
#include <cassert>
+#include <type_traits>
#include "test_macros.h"
@@ -24,12 +24,7 @@ void test() {
char c = 'c';
nullptr_t p = nullptr;
using Context = std::basic_format_context<CharT*, CharT>;
- {
- ASSERT_NOEXCEPT(std::basic_format_args<Context>{});
-
- std::basic_format_args<Context> format_args{};
- assert(!format_args.get(0));
- }
+ static_assert(!std::is_default_constructible_v<std::basic_format_args<Context>>);
{
auto store = std::make_format_args<Context>(i);
ASSERT_NOEXCEPT(std::basic_format_args<Context>{store});
diff --git a/libcxx/test/std/utilities/format/format.arguments/format.args/get.pass.cpp b/libcxx/test/std/utilities/format/format.arguments/format.args/get.pass.cpp
index c590cebf48acc..af8d7eff6f6b8 100644
--- a/libcxx/test/std/utilities/format/format.arguments/format.args/get.pass.cpp
+++ b/libcxx/test/std/utilities/format/format.arguments/format.args/get.pass.cpp
@@ -82,11 +82,6 @@ void test_string_view(From value) {
template <class CharT>
void test() {
using Context = std::basic_format_context<CharT*, CharT>;
- {
- const std::basic_format_args<Context> format_args{};
- ASSERT_NOEXCEPT(format_args.get(0));
- assert(!format_args.get(0));
- }
using char_type = typename Context::char_type;
std::basic_string<char_type> empty;
``````````
</details>
https://github.com/llvm/llvm-project/pull/97250
More information about the libcxx-commits
mailing list