http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56421



--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> 2013-02-22 
18:47:55 UTC ---

(In reply to comment #5)

> Function templates must not be instantiated unless the number of arguments

> match.



Where does the standard say that?





> [C++11: 13.3/2]:

> 

> - First, a subset of the candidate functions (those that have the proper 
> number

> of arguments and meet certain other conditions) is selected to form a set of

> viable functions (13.3.2).



You've quoted this out of context, the preceding sentence says "But, once the

candidate functions and argument lists have been identified, the selection of

the best function is the same in all cases:" 



i.e. identifying the candidate functions happens before considering the number

of arguments.



13.3.1 describes how the set of candidate functions (including function

template specializations) is found, then 13.3.2 describes how the number of

arguments is considered in order to find the subset of candidate functions that

are viable.



Also see 14.8.3 [temp.over]/1 "The complete set of candidate functions includes

all the synthesized declarations and all of the non-template overloaded

functions of the same name."



"The complete set" is the set *before* the number of arguments is considered to

find the viable subset. To synthesize the declaration Foo<int>::type must be

known, and that type results in an error.



That's how I read it anyway, I guess I'll leave this for someone else to

interpret.

Reply via email to