From aa3299f658f6621bfbe791dd67d0a6bdde9334d9 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Fri, 21 Jul 2023 17:01:08 -0700 Subject: [PATCH 1/2] Use lvalue references for the LHS of `is_assignable_v` and `is_nothrow_assignable_v`. Also cite LWG-3661 with usual syntax. --- .../test.cpp | 60 +++++++++---------- .../tests/P0718R2_atomic_smart_ptrs/test.cpp | 12 ++-- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/tests/std/tests/P0608R3_improved_variant_converting_constructor/test.cpp b/tests/std/tests/P0608R3_improved_variant_converting_constructor/test.cpp index 38e604d1b7..30be63bab5 100644 --- a/tests/std/tests/P0608R3_improved_variant_converting_constructor/test.cpp +++ b/tests/std/tests/P0608R3_improved_variant_converting_constructor/test.cpp @@ -46,19 +46,19 @@ void assert_P0608R3() { static_assert(!is_constructible_v>, int>); static_assert(!is_constructible_v, int>); - static_assert(is_assignable_v, const char*>); - static_assert(is_assignable_v, string>); - static_assert(is_assignable_v>, char16_t>); - static_assert(is_assignable_v>, double&>); - static_assert(is_assignable_v, char>); - static_assert(is_assignable_v, int>); - static_assert(is_assignable_v, int>); - static_assert(is_assignable_v, int>); - static_assert(is_assignable_v, long long>, int>); - static_assert(is_assignable_v, char>); - static_assert(!is_assignable_v, int>); - static_assert(!is_assignable_v>, int>); - static_assert(!is_assignable_v, int>); + static_assert(is_assignable_v&, const char*>); + static_assert(is_assignable_v&, string>); + static_assert(is_assignable_v>&, char16_t>); + static_assert(is_assignable_v>&, double&>); + static_assert(is_assignable_v&, char>); + static_assert(is_assignable_v&, int>); + static_assert(is_assignable_v&, int>); + static_assert(is_assignable_v&, int>); + static_assert(is_assignable_v, long long>&, int>); + static_assert(is_assignable_v&, char>); + static_assert(!is_assignable_v&, int>); + static_assert(!is_assignable_v>&, int>); + static_assert(!is_assignable_v&, int>); } void assert_P1957R2() { @@ -67,9 +67,9 @@ void assert_P1957R2() { static_assert(is_constructible_v, bitset<4>::reference>); static_assert(is_constructible_v, bitset<4>::reference>); - static_assert(is_assignable_v, bool>); - static_assert(is_assignable_v, bitset<4>::reference>); - static_assert(is_assignable_v, bitset<4>::reference>); + static_assert(is_assignable_v&, bool>); + static_assert(is_assignable_v&, bitset<4>::reference>); + static_assert(is_assignable_v&, bitset<4>::reference>); } void assert_more_examples() { @@ -89,20 +89,20 @@ void assert_more_examples() { static_assert(!is_constructible_v, int>); static_assert(!is_constructible_v, int>); - static_assert(is_assignable_v, double>); - static_assert(is_assignable_v>, optional, int>, int>); - static_assert(is_assignable_v>, optional>, int>); - static_assert(is_assignable_v, optional, float>, int>); - static_assert(is_assignable_v, convertible_bool>); - static_assert(is_assignable_v, convertible_bool>); - static_assert(is_assignable_v, bool>); - static_assert(is_assignable_v, convertible_bool>); - static_assert(is_assignable_v, bool>); - static_assert(is_assignable_v, bool>); - static_assert(is_assignable_v, int>); - static_assert(!is_assignable_v, unsigned int>); - static_assert(!is_assignable_v, int>); - static_assert(!is_assignable_v, int>); + static_assert(is_assignable_v&, double>); + static_assert(is_assignable_v>, optional, int>&, int>); + static_assert(is_assignable_v>, optional>&, int>); + static_assert(is_assignable_v, optional, float>&, int>); + static_assert(is_assignable_v&, convertible_bool>); + static_assert(is_assignable_v&, convertible_bool>); + static_assert(is_assignable_v&, bool>); + static_assert(is_assignable_v&, convertible_bool>); + static_assert(is_assignable_v&, bool>); + static_assert(is_assignable_v&, bool>); + static_assert(is_assignable_v&, int>); + static_assert(!is_assignable_v&, unsigned int>); + static_assert(!is_assignable_v&, int>); + static_assert(!is_assignable_v&, int>); } void test_variant_constructor_P0608R3() { diff --git a/tests/std/tests/P0718R2_atomic_smart_ptrs/test.cpp b/tests/std/tests/P0718R2_atomic_smart_ptrs/test.cpp index 0150911878..b1fc41d8d4 100644 --- a/tests/std/tests/P0718R2_atomic_smart_ptrs/test.cpp +++ b/tests/std/tests/P0718R2_atomic_smart_ptrs/test.cpp @@ -634,12 +634,12 @@ int main() { ensure_member_calls_compile>>(); ensure_member_calls_compile>>(); - // LWG-3893: LWG 3661 broke atomic> a; a = nullptr; - static_assert(is_nothrow_assignable_v>, nullptr_t>); - static_assert(is_nothrow_assignable_v>, nullptr_t>); - static_assert(is_nothrow_assignable_v>, nullptr_t>); - static_assert(is_nothrow_assignable_v>, nullptr_t>); - static_assert(is_nothrow_assignable_v>, nullptr_t>); + // LWG-3893: LWG-3661 broke atomic> a; a = nullptr; + static_assert(is_nothrow_assignable_v>&, nullptr_t>); + static_assert(is_nothrow_assignable_v>&, nullptr_t>); + static_assert(is_nothrow_assignable_v>&, nullptr_t>); + static_assert(is_nothrow_assignable_v>&, nullptr_t>); + static_assert(is_nothrow_assignable_v>&, nullptr_t>); #ifdef _DEBUG sptr0 = {}; From 705a0489990eabab49b4e2a3cafd01dff849548e Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Fri, 21 Jul 2023 17:02:41 -0700 Subject: [PATCH 2/2] Check const rvalues and const lvalues in P2321R2_proxy_reference. --- tests/std/tests/P2321R2_proxy_reference/test.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/std/tests/P2321R2_proxy_reference/test.cpp b/tests/std/tests/P2321R2_proxy_reference/test.cpp index c9180eb5f7..a49c6cbaa1 100644 --- a/tests/std/tests/P2321R2_proxy_reference/test.cpp +++ b/tests/std/tests/P2321R2_proxy_reference/test.cpp @@ -274,6 +274,7 @@ constexpr bool test() { { // Test vector::reference static_assert(is_assignable_v::reference, bool>); + static_assert(is_assignable_v::reference&, bool>); vector vb{false}; const vector::reference r = vb[0];