Andrej Mitrovic wrote:
Yao G. Wrote:

That's a bug. The return value should be CheckedInt(result);

I'll add that to the errata.


Yao G. Wrote:

http://www.digitalmars.com/d/2.0/mixin.html

I wasn't refering to the mixin, but the call to CheckedInt(). mixin compiles "value" ~ op ~ "rhs.value", which in this case evaluates to 5 + 5 and the whole call becomes CheckedInt(10).
What I don't understand is how you can construct a new CheckedInt struct by 
calling it with CheckedInt(10), when I have to use a call like 
CheckedInt!(int)(10) outside the struct (in main or in a unittest block).

It is the same in C++: the name of the template is equivalent to the current instantiation of the template.

foo() and bar() are both legal:

template <class T> class C
{
public:

    C foo()
    {
        return C();
    }

    C<T> bar()
    {
        return C<T>();
    }
};

int main()
{
    C<int> c;
    c.foo();
    c.bar();
}

It seems to be the same in D. I don't know whether this is intended, or just a left over from the C++ parts of dmd. (I assume dmd shares code with the Digital Mars C++ compiler.)

Ali

Reply via email to