2013/5/16 Don Clugston <[email protected]>

> On 15 May 2013 23:19, Andrei Alexandrescu <[email protected]> wrote:
>>
>> I'm not assuming you're proposing this, but I'm clarifying just in case:
>> a member that takes per-instance memory YET always has the same value in
>> all objects would be positively useless. _That_ should at best be an error.
>>
>
> Great! This is exactly my argument. In that case we are actually in
> agreement. Thats the case I want to disallow.
>

Why it should be error? Yes, it would be finally redundant, but the
redundancy is necessary to keep meta-programming simple.

import std.traits;
struct MyData(T) if (isIntegral!T) {
    T value = 10;   // provides default value
    alias value this;
    this(T v) { value = v; }
}

With 2.062 and earlier, this simple MyData struct did not work when T is
non-mutable integer type. To support it, it had been required that checking
T is non-mutable and then remove constructor.

import std.traits;
struct MyData(T) if (isIntegral!T) {
    T value = 10;   // provides default value
    alias value this;
    static if (!is(T == const) && !is(T == immutable))
    {   // necessary for 2.062 and earlier
        this(T v) { value = v; }
    }
}

This is definitely unnecessary complexity. Why you need this?

D should have ability for writing efficient code, but D should not enforce
writing efficient code to users.

Kenji Hara
_______________________________________________
dmd-beta mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-beta

Reply via email to