tail const
Dmitry Olshansky
dmitry.olsh at gmail.com
Fri Dec 3 23:48:26 PST 2010
On 04.12.2010 6:23, Andrei Alexandrescu wrote:
> On 12/3/10 7:40 PM, Michel Fortin wrote:
>> I have an idea that would fix those: make a template struct/class
>> instance implicitly convertible to another instance of that same
>> template if all members share the same memory layout and each member is
>> implicitly convertible to the same member of the other template.
>
> I'm afraid that can't work.
>
> struct A(T) {
> T obj;
> void fun() { obj->method(); }
> }
>
Looks discouraging at first, but perfectly valid given that the example
works only when A!Object compiles, i.e. Object have method 'method', and
then:
> auto a = new A!Widget;
> a.obj = new Widget;
> A!Object b = *a; // works because Widget converts to Object
// A!Object* b = a; // should not compile, and would be a problem if A
is a class
//now we have another struct b with reference to a's widget
> b.obj = new Object; //no problem, a stays intact
> b.fun(); // since A!Object already compiles, it's perfectly valid
In fact, it looks like Michel's rule is very promising, just replace
"struct/class" part with "struct" in definition.
--
Dmitry Olshansky
More information about the Digitalmars-d
mailing list