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