[Issue 3286] New: Default parameter prevents solution of inter-module circular dependency
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu Sep 3 07:57:53 PDT 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3286
Summary: Default parameter prevents solution of inter-module
circular dependency
Product: D
Version: 2.032
Platform: All
OS/Version: All
Status: NEW
Keywords: rejects-valid
Severity: major
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: hskwk at inter7.jp
module a;
import b;
import c;
class A {
static __gshared A a;
void f(B b) {}
void g(C c) {} // <- Error: identifier 'C' is not defined
}
////////////
module b;
import a;
class B { void f(A x = A.a) {} }
////////////
module c;
import a;
class C { void f(A x = A.a) {} }
There is no problem if class A, B and C are in the same module.
So this dependency is valid and the error is specific for inter-module circular
dependency.
If default parameter "= A.a" for B.f is removed, it goes well.
There is no problem if A.a appeared in the body of B.f.
It seems that the compiler tries to recognize the semantics of default
parameter A.a when it is reading declaration of B.f.
Default parameters are usually hint for the expressions which call the
functions with default parameters, this behavior is inexplicable.
This error is a regression between 2.031 and 2.032.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list