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

Reply via email to