On 05/14/2012 10:02 PM, Timon Gehr wrote: > On 05/15/2012 04:28 AM, John Belmonte wrote: >> C API's often use a opaque struct pointer as a handle. Mapping such a >> struct to D using a forward declaration, I noticed that UFCS doesn't >> work: >> >> struct State; >> ... >> State* s = new_state(); >> foo(s); // ok >> s.foo(); // compile error >> >> Error detail: >> >> Error: struct State is forward referenced when looking for 'foo' >> Error: struct State is forward referenced when looking for 'opDot' >> Error: struct State is forward referenced when looking for 'opDispatch' >> >> I'm wondering if anything would be harmed by removing this restriction. >> >> As a workaround I can use "struct State {}", but that feels wrong. >> > > This is a compiler bug. You can report it here: > http://d.puremagic.com/issues/
I would expect the compiler to need to see the definition of S to know that it really does not have a matching foo() member function.
Ali -- D Programming Language Tutorial: http://ddili.org/ders/d.en/index.html