https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87441
--- Comment #2 from Paolo Carlini <paolo.carlini at oracle dot com> --- This is enough: template<typename X, typename Y = X> concept bool HasBinaryAdd = requires(X x, Y y) { {x + y} -> decltype(x + y); }; void proc(HasBinaryAdd x, HasBinaryAdd y);