// PR c++/115561 // { dg-do compile { target c++20 } } template auto declval() noexcept -> _Tp&&; template struct enable_if { }; template struct enable_if { using type = _Tp; }; template using enable_if_t = typename enable_if<_Cond, _Tp>::type; template struct is_void { static constexpr bool value = false; }; template using invoke_result_t = decltype(declval()(declval()...)); template using iter_reference_t = decltype(*declval()); struct iter_move_fn { template constexpr auto operator() (I &&i) -> void; } iter_move; template using iter_rvalue_reference_t = decltype(iter_move(declval())); template concept same_as = true; template concept readable_concept_ = same_as, iter_rvalue_reference_t>; template concept indirectly_readable = readable_concept_>; template using indirect_result_t = enable_if_t, invoke_result_t>>; template concept transformable = (!is_void>::value); template requires transformable constexpr void transform(I, Fun) { } void foo() { struct B {}; (void) transform((B*)nullptr, [](B) {return 0; }); }