Bug 3430 – Cannot use constructor in member function default argument
Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D1 (retired)
Platform
All
OS
Windows
Creation time
2009-10-21T00:19:22Z
Last change time
2019-10-10T13:23:35Z
Keywords
rejects-valid
Assigned to
No Owner
Creator
Don
Comments
Comment #0 by clugdbug — 2009-10-21T00:19:22Z
class Foo{
this(int a){}
static void bug(Foo a = new Foo(77)){}
}
test.d(4): Error: no constructor for Foo
This has been present since dinosaurs walked the earth(also failed in DMD 0.175).
Moving the function outside the class allows it to compile.
The struct version is D2 only:
struct Foo{
this(int a){}
void bug(Foo a = Foo(77)){}
}
test.d(4): Error: more initializers than fields of Foo
This is part of a family of closely related bugs.
If instead, the function is in a different struct/class, you get ICE bug 2437;
if it's a free function, you get ICE bug 2935.
Comment #1 by razvan.nitu1305 — 2019-10-10T13:23:35Z