14.8.2.4, section 11 (I refer to draft N3242).
In most cases, all template parameters must have values in order for
deduction to succeed, but for partial ordering purposes a template
parameter may remain without a value provided it is not used in the
types being used for partial ordering. [ Note: A template parameter
used in a non-deduced context is considered used. —end note ] [
Example:template <class T> T f(int); // #1 template <class T, class U> T f(U); // #2 void g() { f<int>(1); // calls #1 }
In your case, #3 will be used.