[Issue 16444] New: Less noisy error messages if built-in method is @disable (e.g. opAssign)

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Mon Aug 29 08:50:05 PDT 2016


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

          Issue ID: 16444
           Summary: Less noisy error messages if built-in method is
                    @disable (e.g. opAssign)
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: greensunny12 at gmail.com

When a builtin-in method like opAssign is disabled, the error messages are
quite noisy:

struct A
{
    @disable void opAssign(Other)(Other other);
}

pure nothrow @safe @nogc unittest
{
    A a;
    a = A();
}

foo.d(16): Error: function foo.A.opAssign!(A).opAssign is not callable because
it is annotated with @disable
foo.d(16): Error: pure function 'foo.__unittestL13_1' cannot call impure
function 'foo.A.opAssign!(A).opAssign'
foo.d(16): Error: safe function 'foo.__unittestL13_1' cannot call system
function 'foo.A.opAssign!(A).opAssign'
foo.d(16): Error: @nogc function 'foo.__unittestL13_1' cannot call non- at nogc
function 'foo.A.opAssign!(A).opAssign'
foo.d(16): Error: function 'foo.A.opAssign!(A).opAssign' is not nothrow
foo.d(13): Error: function 'foo.__unittestL13_1' is nothrow yet may throw


There is a trick that is used in https://github.com/dlang/phobos/pull/4755, one
can simply annotate the disabled function with all attributes:

struct B
{
    pure nothrow @safe @nogc @disable void opAssign(Other)(Other other);
}

pure nothrow @safe @nogc unittest
{
    B b;
    b = B();
}

foo.d(16): Error: function foo.B.opAssign!(B).opAssign is not callable because
it is annotated with @disable

--


More information about the Digitalmars-d-bugs mailing list