https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125981
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- I don't think this is a bug. The standard requires that the predicate's result type is boolean-testable, which means: "given two types T1 and T2 that each model boolean-testable-impl , the && and || operators within the expressions declval<T1>() && declval<T2>() and declval<T1>() || declval<T2>() resolve to the corresponding built-in operators."
