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: [email protected]
          Reporter: [email protected]

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.

--

Reply via email to