Fixes: https://github.com/llvm/llvm-project/issues/45563
template<class T> concept True = true; template <class T> concept C1 = requires (T) { requires True<typename T::value> || True<T>; }; template <class T> constexpr bool foo() requires True<typename T::value> || True<T> { return true; } static_assert(C1<double>); // Previously failed due to SFINAE error static_assert(foo<int>()); // but this works fine.
The issue here is the discrepancy between how a nested requirement is evaluated Vs how a non-nested requirement is evaluated.
This patch makes constraint checking consistent for nested requirement
and trailing requires expressions by using the same evaluator.