Way to Only Pass Second Template Parameter

  • A+

So I have a template function which has a defaulted 2nd argument. It's 1st argument can be deduced, so something like:

template <typename F, typename S = int> void foo(const F param) 

This works fine in the general case, I'll just call foo(bar). But in the case where I want to specify the second argument, I cannot do this: foo<char>(bar), because char is taken as F. Obviously this isn't the case because bar isn't a char, so F should be deducible.

Is there a way that I can pass only one template argument here which will apply to S, still have F be deduced, and still default S in the general case?


Just reorder template arguments:

template <typename S = int, typename F> void foo(const F param); 

template can have default at any place. At the end, all template parameters should be provided, defaulted or deduced.


:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: