From b5e694eba8248b478cb1288f3730dd2d53286e7c Mon Sep 17 00:00:00 2001 From: Georgy Guminov Date: Wed, 15 Jan 2025 21:40:42 +0300 Subject: [PATCH 1/2] Add test. --- test/expected.t.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/expected.t.cpp b/test/expected.t.cpp index 5763223..0ff8bce 100644 --- a/test/expected.t.cpp +++ b/test/expected.t.cpp @@ -1373,6 +1373,8 @@ CASE( "expected: Allows to transform value" " [monadic p2505r3]" ) EXPECT( ue.transform( mul2 ).error() == 42 ); } + expected, int>{std::vector{}}.transform([](const std::vector&) { }); + #if nsel_P2505R >= 5 // R5 changed remove_cvref_t to remove_cv_t in transform/transform_error, which broke data member pointer transforms, // because the result type must be a valid expected value type, but expressions with reference types are not. From c0ee99fb5f4e565652f1024d2867fdfa3d9f31a0 Mon Sep 17 00:00:00 2001 From: Georgy Guminov Date: Wed, 15 Jan 2025 21:45:58 +0300 Subject: [PATCH 2/2] Fix. --- include/nonstd/expected.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/nonstd/expected.hpp b/include/nonstd/expected.hpp index 54960a2..c381dcd 100644 --- a/include/nonstd/expected.hpp +++ b/include/nonstd/expected.hpp @@ -1240,11 +1240,11 @@ nsel_constexpr auto invoke( F && f, Args && ... args ) } template< typename F, typename ... Args > -using invoke_result_nocvref_t = typename std20::remove_cvref< decltype( invoke( std::declval< F >(), std::declval< Args >()... ) ) >::type; +using invoke_result_nocvref_t = typename std20::remove_cvref< decltype( ::nonstd::expected_lite::detail::invoke( std::declval< F >(), std::declval< Args >()... ) ) >::type; #if nsel_P2505R >= 5 template< typename F, typename ... Args > -using transform_invoke_result_t = typename std::remove_cv< decltype( invoke( std::declval< F >(), std::declval< Args >()... ) ) >::type; +using transform_invoke_result_t = typename std::remove_cv< decltype( ::nonstd::expected_lite::detail::invoke( std::declval< F >(), std::declval< Args >()... ) ) >::type; #else template< typename F, typename ... Args > using transform_invoke_result_t = invoke_result_nocvref_t