Nick Sabalausky Wrote:

> "Sam S E" <[EMAIL PROTECTED]> wrote in message 
> news:[EMAIL PROTECTED]
> > Hi,
> >
> > We already have the notation:
> >
> > int[] array;
> > void foo(int[] a, int x);
> >
> > foo(array, 3);
> > array.foo(3); // means the same thing
> >
> > so why not extend this to struct first arguments?
> > --Sam
> 
> A lot of people want that to be extended to all types. It just doesn't seem 
> to be happening for some reason. Another popular approach (my preference) is 
> something closer to C#'s way of doing it:
> 
> int x;
> void foo(extension int a, int b);
> void bar(int a, int b);
> 
> foo(x, 3); // Ok
> x.foo(3); // Ok
> 
> bar(x, 3); // Ok
> x.bar(3); // Error
> 
> 

That's a good idea, but I would put the keyword on the second case, since you 
would rarely want to restrict the syntax, causing less typing. I also realized 
that this could enable a more flexible op overloading syntax:

static Foo opAdd(invariant Foo x, int y)
{
    ...
}

Using current syntax, you can't make the Foo invariant. This has been causing 
problems with porting a C++ program to D, since C++ supports:

class Foo
{
    ...
    Foo opAdd(int) const
    {
        ...
    }
}

--Sam

Reply via email to