On Thursday, 31 January 2013 at 12:58:13 UTC, TommiT wrote:
[..] So, it might be just as well to just disallow copying of 'properties' except when it happens as a part of copying the enclosing object.
Or... maybe not, because disallowing making a copy of a property variable makes it illegal to pass it by value as a templated argument:
struct S { int n; property Prop { @property int get() { return outer.n; } alias this = get; } Prop prop; } void foo(int v) {} void bar(T)(T t) if (isImplicitlyConvertible!(T,int)) { int v = t; } ... S s; foo(s.prop); // ok: calling foo(s.prop.get) bar(s.prop); // error: cannot make a copy of a // property variable of type S.Prop