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: nob...@puremagic.com Reporter: greensunn...@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-@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 --