https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67070
--- Comment #5 from Jason Merrill <jason at gcc dot gnu.org> --- (In reply to Casey Carter from comment #3) > Although not intuitive, this behavior is sane. It's what we're accustomed to > when overloading functions constrained with enable_if<foo<T>::value> and > enable_if<!foo<T>::value>; substitution failure of foo<T> disables *both* > overloads. The difference is that here the problem is buried in the definition of the concept (several concepts deep, in the original testcase) rather than written explicitly in the constrained template.