diff options
author | Iain Sandoe <iain@sandoe.co.uk> | 2022-04-29 17:54:39 +0100 |
---|---|---|
committer | Iain Sandoe <iain@sandoe.co.uk> | 2022-04-29 17:54:39 +0100 |
commit | 3e5f7ca352c26a222bb588741b7c700a3052a372 (patch) | |
tree | 283aec084274668fe34c23c49ab2999390ed9778 /libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr_c++20.cc | |
parent | 2ce0608ca3dca30518bec525c435f7bc4d7f9b70 (diff) | |
parent | b85e79dce149df68b92ef63ca2a40ff1dfa61396 (diff) | |
download | gcc-3e5f7ca352c26a222bb588741b7c700a3052a372.tar.gz |
Merge master r12-8312.devel/c++-coroutines
* Merge master r12-8312-gb85e79dce149.
Diffstat (limited to 'libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr_c++20.cc')
-rw-r--r-- | libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr_c++20.cc | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr_c++20.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr_c++20.cc new file mode 100644 index 00000000000..243d80aaba5 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/constexpr_c++20.cc @@ -0,0 +1,85 @@ +// { dg-options "-std=gnu++23" } +// { dg-do compile { target c++23 } } + +#include <memory> + +#ifndef __cpp_lib_constexpr_memory +# error "Feature test macro for constexpr unique_ptr is missing in <memory>" +#elif __cpp_lib_constexpr_memory < 202202L +# error "Feature test macro for constexpr unique_ptr has wrong value in <memory>" +#endif + +#include <testsuite_hooks.h> + +constexpr bool +test_default() +{ + std::unique_ptr<int> p; + std::unique_ptr<int> np(nullptr); + VERIFY( p == np ); + + std::unique_ptr<int[]> a; + std::unique_ptr<int[]> na(nullptr); + VERIFY( a == na ); + + return true; +} +static_assert( test_default() ); + +constexpr bool +test_ptr() +{ + std::unique_ptr<int> p(new int(2)); + VERIFY( *p == 2 ); + std::unique_ptr<int[]> a(new int[]{0, 1, 2}); + VERIFY( a[2] == 2 ); + + return true; +} +static_assert( test_ptr() ); + +constexpr bool +test_del() +{ + const std::default_delete<int> pd; + std::unique_ptr<int> p1(new int(1), pd); + VERIFY( *p1 == 1 ); + std::unique_ptr<int> p2(new int(2), std::default_delete<int>{}); + VERIFY( *p2 == 2 ); + const std::default_delete<int[]> ad; + std::unique_ptr<int[]> a1(new int[]{3, 4}, ad); + VERIFY( a1[0] == 3 ); + std::unique_ptr<int[]> a2(new int[]{5, 6}, std::default_delete<int[]>{}); + VERIFY( a2[1] == 6 ); + + return true; +} +static_assert( test_del() ); + +constexpr bool +test_move() +{ + std::unique_ptr<int> p1(new int(2)); + std::unique_ptr<int> p2 = std::move(p1); + VERIFY( *p2 == 2 ); + std::unique_ptr<int[]> a1(new int[]{0, 1, 2}); + std::unique_ptr<int[]> a2 = std::move(a1); + VERIFY( a2[2] == 2 ); + + return true; +} +static_assert( test_move() ); + +constexpr bool +test_convert() +{ + std::unique_ptr<int> p1(new int(2)); + std::unique_ptr<const int> p2 = std::move(p1); + VERIFY( *p2 == 2 ); + std::unique_ptr<int[]> a1(new int[]{0, 1, 2}); + std::unique_ptr<const int[]> a2 = std::move(a1); + VERIFY( a2[2] == 2 ); + + return true; +} +static_assert( test_convert() ); |