disable all member function calls for rvalues?

Jason House jason.james.house at gmail.com
Thu Dec 17 21:37:39 PST 2009


dsimcha Wrote:

> == Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s article
> > There is a wart in D I'd like to eliminate. Unfortunately, that would
> > also eliminate some valid uses.
> 
> This is the problem, with this feature and with a lot of other "safety" features
> that have been considered.  Having lots of static checking, etc. is good if and
> only if it doesn't get in the way too much when the programmer **does** know what
> he/she is doing.  Yes, this limitation would prevent some bugs, but it would get
> in the way very frequently as well and be an extremely annoying piece of syntactic
> salt.  Given the choice I'd rather have to debug a few more bugs in corner cases
> than have the language reject lots of valid cases.
> 
> Of course, there's room for intermediate solutions:
> 
> 1.  Allow member function calls iff the function is const.  For example, the
> following would still work:
> 
> struct A {
>     string toString() const {
>          return "A";
>     }
> }

immutable functions too.

 
> struct B {
>     A getA() @property {
>         return A.init;
>     }
> }
> 
> B b;
> string s = b.getA().toString();
> 
> 2.  Special case opAssign, since this clearly makes no sense for rvalues.
> 
> 3.  If consistency is the main concern, make other ref rvalue binding more
> permissive instead.

An alternate I was thinking about was disallowing non-const/immutable functions with void return type. They seem the most probable to be doing bad things.

Some may want the read portion of a property to be callable on an rvalue. That could allow use of "logical const" by convention...



More information about the Digitalmars-d mailing list