http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56421
--- Comment #3 from Daniel Krügler <daniel.kruegler at googlemail dot com> 2013-02-22 10:59:28 UTC --- (In reply to comment #2) > Isn't G++ correct? Foo::type exists unconditionally, so SFINAE doesn't apply. > The invalid type is not in the immediate context of the substitution. This was my initial reaction, too, but there is one point in this example where I need to find clarification: Both foo() templates have a *different* function parameter lists (one void, one with int). I'm yet unsure (due to lack of time studying whether 14.8.2 requires to check first parameter compatibility in the call context or not).