www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 16459] New: opDispatch gives obtuse error when dispatching to

https://issues.dlang.org/show_bug.cgi?id=16459

          Issue ID: 16459
           Summary: opDispatch gives obtuse error when dispatching to a
                    function that doesn't exist
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Windows
            Status: NEW
          Severity: major
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: gooberman gmail.com

struct SomeObject( T )
{
  auto opDispatch( string op, Args... )( Args args )
  {
    mixin( "return pObject." ~ op ~ "( args );" );
  }

  T* pObject;
}

Depending on how you invoke opDispatch, it either gives you a helpful error
message or one that has you scratching your head. For example:

someObject.doSomething();

Gives the error message:

test.d: Error: no property 'doSomething' for type 'SomeObject!(Something)'

But:

someObject.opDispatch!"doSomething"();

Gives the error:

test.d-mixin: Error: no property 'doSomething' for type 'Something*'

The problem here is that the opDispatch has been invoked because it can't find
the property in the first place. If the code inside the opDispatch fails to
compile, I want to know about it. The semantic difference here is that invoking
opDispatch manually is explicitly telling exactly me where the problem is,
whereas invoking it naturally is telling me something I already know.

--
Sep 01 2016