Following code causes compilation error in dmd 2.055. code: ----- struct S { @disable this(); this(int a) {} } S s = S(10); writeln(s); ----- output: ----- /path/to/phobos/std/stdio.d(1483): Error: variable std.stdio.writeln(T...) if (T.length == 0).writeln._args_field_0 initializer required for type S /path/to/phobos/std/stdio.d(1495): Error: variable std.stdio.writeln(T...) if (T.length == 1 && is(typeof(args[0]) : const(char)[])).writeln._args_field_0 initializer required for type S /path/to/phobos/std/stdio.d(1508): Error: variable std.stdio.writeln(T...) if (T.length > 1 || T.length == 1 && !is(typeof(args[0]) : const(char)[])).writeln._args_field_0 initializer required for type S ----- I think this is a regression.
This issue will be fixed by dmd/pull/286 as a side effect. https://github.com/D-Programming-Language/dmd/pull/285 That patch applies STCparameter to function parameters correctly inside template constraint, then errors are suppressed.
https://github.com/D-Programming-Language/dmd/commit/91debf464f8b6c49a0d522d10fce285ad1a5f9e7