-
Notifications
You must be signed in to change notification settings - Fork 12.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[libc++][format] LWG4106: basic_format_args
should not be default-constructible
#97250
Conversation
@llvm/pr-subscribers-libcxx Author: A. Jiang (frederick-vs-ja) ChangesThe test coverage for the empty state of Full diff: https://github.com/llvm/llvm-project/pull/97250.diff 3 Files Affected:
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;
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks! LGTM modulo one nit.
(I'll make sure this is updated on the status page once we updated it for St. Louis.)
libcxx/test/std/utilities/format/format.arguments/format.args/get.pass.cpp
Outdated
Show resolved
Hide resolved
✅ With the latest revision this PR passed the C/C++ code formatter. |
I've just committed #97951 can you rebase your patch on main and update the status page for this patch. |
Done. |
…onstructible (llvm#97250) 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`.
See LWG4106 and P3341R0.
The test coverage for the empty state of
basic_format_args
inget.pass.cpp
is to be completely removed, because the non-default-constructibility is covered inctor.pass.cpp
.