From cb4433b677a06ecbb3112f39d24b28f19b0d2626 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Tue, 10 Dec 2024 04:23:09 -0800 Subject: [PATCH] [libcxx][test] Silence nodiscard warnings for `std::expected` (#119174) I'm exploring marking microsoft/STL's std::expected as [[nodiscard]], which affects all functions returning std::expected, including its own monadic member functions. As usual, libc++'s test suite contains calls to these member functions to make sure they compile, but it's discarding the returns. I'm adding void casts to silence the [[nodiscard]] warnings without altering what the test is covering. --- .../monadic/and_then.pass.cpp | 16 ++++++------- .../monadic/or_else.pass.cpp | 20 ++++++++-------- .../monadic/transform.pass.cpp | 24 +++++++++---------- .../monadic/transform_error.pass.cpp | 20 ++++++++-------- 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/libcxx/test/std/utilities/expected/expected.expected/monadic/and_then.pass.cpp b/libcxx/test/std/utilities/expected/expected.expected/monadic/and_then.pass.cpp index 293c2d39d4a325..3ac58b34eff8c6 100644 --- a/libcxx/test/std/utilities/expected/expected.expected/monadic/and_then.pass.cpp +++ b/libcxx/test/std/utilities/expected/expected.expected/monadic/and_then.pass.cpp @@ -263,8 +263,8 @@ constexpr void test_val_types() { constexpr void test_sfinae() { std::expected e(std::unexpected(2)); auto l = [](auto&& x) { return x.non_const(); }; - e.and_then(l); - std::move(e).and_then(l); + (void)e.and_then(l); + (void)std::move(e).and_then(l); } constexpr void test_move_only_error_type() { @@ -272,14 +272,14 @@ constexpr void test_move_only_error_type() { { std::expected e; auto l = [](int) { return std::expected{}; }; - std::move(e).and_then(l); + (void)std::move(e).and_then(l); } // Test const&& { const std::expected e; auto l = [](const int) { return std::expected{}; }; - std::move(e).and_then(l); + (void)std::move(e).and_then(l); } } @@ -296,10 +296,10 @@ constexpr bool test() { return std::expected(); }; - e.and_then(never_called); - std::move(e).and_then(never_called); - ce.and_then(never_called); - std::move(ce).and_then(never_called); + (void)e.and_then(never_called); + (void)std::move(e).and_then(never_called); + (void)ce.and_then(never_called); + (void)std::move(ce).and_then(never_called); return true; } diff --git a/libcxx/test/std/utilities/expected/expected.expected/monadic/or_else.pass.cpp b/libcxx/test/std/utilities/expected/expected.expected/monadic/or_else.pass.cpp index b472a2756be9f9..2587ca60a8efd2 100644 --- a/libcxx/test/std/utilities/expected/expected.expected/monadic/or_else.pass.cpp +++ b/libcxx/test/std/utilities/expected/expected.expected/monadic/or_else.pass.cpp @@ -178,8 +178,8 @@ struct NonConst { constexpr void test_sfinae() { std::expected e{1}; auto l = [](auto&& x) { return x.non_const(); }; - e.or_else(l); - std::move(e).or_else(l); + (void)e.or_else(l); + (void)std::move(e).or_else(l); } constexpr void test_move_only_error_type() { @@ -187,28 +187,28 @@ constexpr void test_move_only_error_type() { { std::expected e; auto l = [](MoveOnlyErrorType&) { return std::expected{}; }; - e.or_else(l); + (void)e.or_else(l); } // Test const& { const std::expected e; auto l = [](const MoveOnlyErrorType&) { return std::expected{}; }; - e.or_else(l); + (void)e.or_else(l); } // Test && { std::expected e; auto l = [](MoveOnlyErrorType&&) { return std::expected{}; }; - std::move(e).or_else(l); + (void)std::move(e).or_else(l); } // Test const&& { const std::expected e; auto l = [](const MoveOnlyErrorType&&) { return std::expected{}; }; - std::move(e).or_else(l); + (void)std::move(e).or_else(l); } } @@ -225,10 +225,10 @@ constexpr bool test() { return std::expected(); }; - e.or_else(never_called); - std::move(e).or_else(never_called); - ce.or_else(never_called); - std::move(ce).or_else(never_called); + (void)e.or_else(never_called); + (void)std::move(e).or_else(never_called); + (void)ce.or_else(never_called); + (void)std::move(ce).or_else(never_called); return true; } diff --git a/libcxx/test/std/utilities/expected/expected.expected/monadic/transform.pass.cpp b/libcxx/test/std/utilities/expected/expected.expected/monadic/transform.pass.cpp index 4fb21374aebe31..cbd54d623c0f42 100644 --- a/libcxx/test/std/utilities/expected/expected.expected/monadic/transform.pass.cpp +++ b/libcxx/test/std/utilities/expected/expected.expected/monadic/transform.pass.cpp @@ -187,13 +187,13 @@ constexpr void test_val_types() { constexpr void test_take_val_return_void() { std::expected e(1); int val = 0; - e.transform([&val](T&&) -> void { + (void)e.transform([&val](T&&) -> void { static_assert(std::is_same_v); assert(val == 0); val = 1; }); assert(val == 1); - std::move(e).transform([&val](T&&) -> void { + (void)std::move(e).transform([&val](T&&) -> void { static_assert(std::is_same_v); assert(val == 1); val = 2; @@ -201,13 +201,13 @@ constexpr void test_take_val_return_void() { const auto& ce = e; assert(val == 2); - ce.transform([&val](T&&) -> void { + (void)ce.transform([&val](T&&) -> void { static_assert(std::is_same_v); assert(val == 2); val = 3; }); assert(val == 3); - std::move(ce).transform([&val](T&&) -> void { + (void)std::move(ce).transform([&val](T&&) -> void { static_assert(std::is_same_v); assert(val == 3); val = 4; @@ -227,8 +227,8 @@ constexpr void test_direct_non_list_init() { constexpr void test_sfinae() { std::expected e(std::unexpected(2)); auto l = [](auto&& x) { return x.non_const(); }; - e.transform(l); - std::move(e).transform(l); + (void)e.transform(l); + (void)std::move(e).transform(l); std::expected e1(std::unexpected(1)); const auto& ce1 = e1; @@ -237,10 +237,10 @@ constexpr void test_sfinae() { return std::expected(); }; - e1.transform(never_called); - std::move(e1).transform(never_called); - ce1.and_then(never_called); - std::move(ce1).transform(never_called); + (void)e1.transform(never_called); + (void)std::move(e1).transform(never_called); + (void)ce1.transform(never_called); + (void)std::move(ce1).transform(never_called); } constexpr void test_move_only_error_type() { @@ -248,14 +248,14 @@ constexpr void test_move_only_error_type() { { std::expected e; auto l = [](int) { return 0; }; - std::move(e).transform(l); + (void)std::move(e).transform(l); } // Test const&& { const std::expected e; auto l = [](const int) { return 0; }; - std::move(e).transform(l); + (void)std::move(e).transform(l); } } diff --git a/libcxx/test/std/utilities/expected/expected.expected/monadic/transform_error.pass.cpp b/libcxx/test/std/utilities/expected/expected.expected/monadic/transform_error.pass.cpp index d35788d9fef25e..a19e17b01f6a94 100644 --- a/libcxx/test/std/utilities/expected/expected.expected/monadic/transform_error.pass.cpp +++ b/libcxx/test/std/utilities/expected/expected.expected/monadic/transform_error.pass.cpp @@ -197,8 +197,8 @@ constexpr void test_direct_non_list_init() { constexpr void test_sfinae() { std::expected e(2); auto l = [](auto&& x) { return x.non_const(); }; - e.transform_error(l); - std::move(e).transform_error(l); + (void)e.transform_error(l); + (void)std::move(e).transform_error(l); std::expected e1; const auto& ce1 = e1; @@ -208,10 +208,10 @@ constexpr void test_sfinae() { return 0; }; - e1.transform_error(never_called); - std::move(e1).transform_error(never_called); - ce1.transform_error(never_called); - std::move(ce1).transform_error(never_called); + (void)e1.transform_error(never_called); + (void)std::move(e1).transform_error(never_called); + (void)ce1.transform_error(never_called); + (void)std::move(ce1).transform_error(never_called); } constexpr void test_move_only_error_type() { @@ -219,28 +219,28 @@ constexpr void test_move_only_error_type() { { std::expected e; auto l = [](MoveOnlyErrorType&) { return 0; }; - e.transform_error(l); + (void)e.transform_error(l); } // Test const& { const std::expected e; auto l = [](const MoveOnlyErrorType&) { return 0; }; - e.transform_error(l); + (void)e.transform_error(l); } // Test && { std::expected e; auto l = [](MoveOnlyErrorType&&) { return 0; }; - std::move(e).transform_error(l); + (void)std::move(e).transform_error(l); } // Test const&& { const std::expected e; auto l = [](const MoveOnlyErrorType&&) { return 0; }; - std::move(e).transform_error(l); + (void)std::move(e).transform_error(l); } }