What am I missing? Pure constructor behaves differently when assigning string member

jostly via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Nov 29 01:40:58 PST 2014


I can't find a way to use a pure constructor to create both 
mutable and immutable instances of the same class, when one of 
the fields I assign is a string.

This works fine:
	class A
	{
		int value;
		
		this(int value_) pure
		{
			this.value = value_;
		}	
	}
	
	auto a_mutable = new A(1);
	auto a_immutable = new immutable A(2);

But if I change the field to a string, I get a compilation error:
	class B
	{
		string value;
		
		this(string value_) pure
		{
			this.value = value_;
		}	
	}
	
	auto b_mutable = new B("foo");
	auto b_immutable = new immutable B("bar");

giving a compilation error for the last row:

Error: mutable method B.this is not callable using a immutable 
object

forcing me to use two separate constructors, which works fine:
	class B
	{
		string value;
		
		this(string value_)
		{
			this.value = value_;
		}	

		this(string value_) immutable
		{
			this.value = value_;
		}	
	}

The question is: am I missing something that would make it 
possible to use a pure constructor in this case, or is it simply 
not possible?


More information about the Digitalmars-d-learn mailing list