On Thursday, 26 July 2018 at 06:37:41 UTC, Simen Kjærås wrote:
On Wednesday, 25 July 2018 at 21:59:00 UTC, aliak wrote:
It needs to work with const as well and immutable too.

immutable a = 3;
auto b = -a; // is ok, should be ok with the optional as well.

Plus T can be a custom type as well with "some" definition of opUnary. I can't seem to find any implementation guidelines either so I assume opUnary or any of the ops implementation details is implementation defined.

Template this[0] (and CopyTypeQualifiers[1])to the rescue!


Ah! Genius!

I had no idea that using TemplateThisParameters would not necessitate qualifying the function in question either.


As for assigning to Optional!(immutable int), the language basically forbids this (cannot modify struct with immutable members). It would, as you say, cause problems when you can get a pointer to the contents.

So is this undefined behaviour?

import std.stdio;

struct S(T) {
    T value;
    void opUnary(string op)() inout {
        mixin(op ~ "cast(T)value;");
    }
}

void main() {
    immutable a = S!int(2);
    ++a;
}






Reply via email to