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.

Reply via email to