On 28.03.2011 17:07, David Nadlinger wrote:
On 3/28/11 4:54 PM, simendsjo wrote:When running compose with two arguments, the implementation uses the template parameter E. I don't understand what's going on here as E isn't submitted to the template - what type is E? […] typeof({ E a; return fun0(fun1(a)); }()) doIt(E)(E a) { […] }doIt is a function template, so E will be deduced to be whatever type the passed argument is – you won't notice the extra »template layer« as E is automatically inferred from the argument. For better understanding, you might want to look at the definition like this: --- template composeImpl(fun...) { […] template doIt(E) { typeof({ E a; return fun0(fun1(a)); }()) doIt(E a) { […] } } } --- David
Thanks. That seems like a good way of mentally mapping template usage until it comes more naturally.
