Change: Some atomic constraints become fold expanded constraints.
Rationale: Permit the subsumption of fold expressions.
Effect on original feature: Valid C++ 2023 code may become ill-formed.
[Example 1: template<typename...V>struct A;
struct S {staticconstexprint compare(const S&){return1; }};
template<typename...T, typename...U>void f(A<T ...>*, A<U ...>*)requires(T::compare(U{})&&...); // was well-formed (atomic constraint of type bool),// now ill-formed (results in an atomic constraint of type int)void g(A<S, S>*ap){
f(ap, ap);
} — end example]
There is no change to the applicable deduction rules for
the individual g candidates:
Type deduction from #1 does not succeed;
type deductions from #2 and #3 both succeed.