Problem with immutables and Template typeof(this)

AuoroP via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Dec 28 14:07:18 PST 2014


I have been trying to figure templates out...

template ExampleTemplate(T)
{
    struct ExampleTemplate
    {
        T value;

        // constructor
        auto this(T value)
        {
            this.value = value;
            return this;
        }

        // opAdd
        typeof(this) opAdd(typeof(this) that) // immutable
        {
            typeof(this) result;
            result.value = this.value + that.value;
            return result;
        }
    }
}

alias ExampleTemplate!int Example;
immutable immutableEx = Example(1);
Example ex = Example(1);
Example ex2 = immutableEx + ex;


I get this error with mutbale opAdd:

example.d(27): Error: mutable method 
example.ExampleTemplate!int.ExampleTemplate.opAdd is not 
callable using a immutable object


I get this error with immutable opAdd 
-------~-------+-------~-------=-------~-------+-------~-------
example.d(18): Error: cannot modify immutable expression
result.value
example.d(27): Error: template instance 
example.ExampleTemplate!int error instantiating


I get that typeof(this) is immutable ExampleTemplate!int.
I can't find any way to cast immutable away because 
typeof(this) is the only way I know to get the type.

Any help would be greatly appreciated!

____________________________________________________________
Can't remember your password? Do you need a strong and secure password?
Use Password manager! It stores your passwords & protects your account.
Check it out at http://mysecurelogon.com/manager





More information about the Digitalmars-d-learn mailing list