[Issue 8104] UFCS on opaque struct won't compile
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun May 20 08:30:15 PDT 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8104
--- Comment #6 from Kenji Hara <k.hara.pg at gmail.com> 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/rseaqsqosqrnirrclcic@forum.dlang.org
>
> 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/jl09ui$ii8$1@digitalmars.com), 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: -------
More information about the Digitalmars-d-bugs
mailing list