http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57520
David Krauss <potswa at mac dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |potswa at mac dot com --- Comment #3 from David Krauss <potswa at mac dot com> --- To summarize the above, template template argument deduction finds an alias template used to declare an object instead of the template type the alias resolved to. This is wrong because alias template specializations are not distinct types. The f1/g1 examples are extraneous. f2 matches the alias (wrong) and g2 matches the type generated by the alias (correct). One workaround is to simply add a typedef, this fixes overload resolution of both functions. typedef Vec<int> vit; vit v; I still reproduce this in a 4.9 trunk build from mid October.