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 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.