http://d.puremagic.com/issues/show_bug.cgi?id=8104
--- Comment #6 from Kenji Hara <[email protected]> 2012-05-20 08:31:49 PDT --- (In reply to comment #5) > @Kenji: When brought up on the forum there seemed to be consensus that this > was > a bug. http://forum.dlang.org/thread/[email protected] > > Why should the act of function member lookup on an opaque struct necessarily > be > an error? It should only be an error if the member cannot be resolved. Prior > to UFCS, there was no way to resolve function members outside of the struct > itself, so it made sense to raise an error directly from the struct's search > call. Because of function hijacking. > At http://dlang.org/struct.html there is a section "Opaque Structs and > Unions". > It says that the members of such a struct are hidden from the user. It's not > clear on what "hidden" implies though. With respect to function members this > documentation should be clarified: an opaque struct behaves as if it has no > function members. No. opaque struct means "may or may not have members", not "has no members". They are different. > Note that all the errors regarding "forward reference" are misleading. These > structs not a forward reference, there are opaque. It's illegal to redefine > an > opaque struct: > > struct S; > struct S { int foo; } // Error: struct S conflicts with struct S > > Given that, what are you trying to protect the user from by disallowing UFCS > on > these structs? I'd like to explain a use case. --- 1. module m_a has a struct S with members. module m_b imports m_a and use S. module m_a; struct S { void foo() { ... } ... } S* makeS() { ... } module m_b; void foo(S* ps) { ... } void main(){ auto ps = makeS(); ps.foo(); /* call S.foo */ } 2. S is changed to 'opaque struct'. (e.g. m_a is provided by hand-made di file.) module m_a; struct S; S* makeS(); 3. In module m_b, now ps.foo() accidently calls m_b.foo. --- Additionaly, current UFCS lookup mechanism is not completely defined/implemented. It's debated recently (See http://forum.dlang.org/thread/[email protected]), so I wouldn't like to change/add lookup mechanism yet. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
