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:
char is taken as
F. Obviously this isn't the case because
bar isn't a
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.