hubert.reinterpretcast added inline comments.
================ Comment at: lib/AST/ExprCXX.cpp:1478 + { + // We do not want error diagnostics escaping here. + Sema::SFINAETrap Trap(S); ---------------- saar.raz wrote: > faisalv wrote: > > Hubert: This needs a TODO: the idea is not to drop SFINAE errors, but to > > avoid instantiation that may trigger errors not in the immediate context of > > instantiation. The substitution needs to happen piecewise. > Could you elaborate/give an example where this handling is inappropriate? Determining satisfaction requires normalization (lazy normalization should be considered). The determination of satisfaction then proceeds by handling the left-hand side of conjunction and disjunction constraints before possibly substituting into the right-hand side; i.e., there is short-circuiting behaviour. Example: ``` template <typename T> concept C = true; template <typename T> struct Q { static constexpr T value = nullptr; }; template <typename T> requires C<T> || T::value struct A { }; template <typename T> requires C<T> || Q<T>::value struct B { }; A<int> a; // okay B<int> b; // okay ``` Repository: rC Clang https://reviews.llvm.org/D41217 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits