A couple of questions

Sam Hu samhudotsamhu at gmail.com
Tue May 12 19:57:03 PDT 2009


Hello,

For the given example below,

E1:
template Chain(R...) if (allSatisfy!(isInputRange, R))
{
    static if (R.length > 1)
        alias ChainImpl!(R) Chain;
    else
        alias R[0] Chain;
}
Q1: What's *if* statement doing right after the template definite?I can guess what the purpose is but I can not find the answer from the spec.

E2:
template isInputRange(R)
{
    enum bool isInputRange = is(typeof(
    {
        R r;             // can define a range object
        if (r.empty) {}  // can test for empty
        r.popFront;          // can invoke next
        auto h = r.front; // can get the front of the range
    }()));
}

Q2:What's the logic inside the enum...{} blocks?
Q3:The *typeof* expression here. is it an anonymous function/delegate which return a bool value?If not,how come there is a () pairs appeared right after the enum{}blocks?If yes,shouldn't the () pairs appear before the last *)* ?

It would be grateful if anybody can help.

Regards,
Sam


More information about the Digitalmars-d-learn mailing list