http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49058
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jason at gcc dot gnu.org --- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-05-19 10:47:15 UTC --- Jason, this works without -pedantic but fails with: template<typename T> T val(); struct F1 { void operator()(); }; template<typename... T> struct tuple { }; template<typename T, typename... V> T call(T&& t, tuple<V...>) { return t; } template<typename F, typename... T> struct Bind { template<typename... A, typename R = decltype( val<F>()( call(val<T>(), tuple<A...>())... ) )> R f(A&&...); template<typename... A, typename R = decltype( val<const F>()( call(val<T>(), tuple<A...>())... ) )> R f(A&&...) const; }; int main() { Bind<F1>().f(); } Is this code relying on a G++ extension? The parameter pack T has zero elements so the expansion: call(val<T>(), tuple<A...>())... ) expands to nothing, and in -pedantic mode that seems to prevent the parameter pack A from participating in type deduction, so SFINAE doesn't remove the overload.