www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Problem with constant structs, destructors and copy constructors

In the current compiler, the non-constant destructor cannot be called on 
a constant struct object:

struct S
{
     ~this() {}
}


void foo() {
     const S s;
}

Error: destructor test.S.~this () is not callable using argument types ()

This can be worked around by applying 'const' to the destructor. The 
question is: do const/immutable destructors even make sense?

Copy constructors are presently unusable with constant struct objects:

struct S
{
     this(this) {}
}

void bar()
{
     const S s;
     const S s2 = s;
}

Error: function test.S.__cpctor (ref S p) is not callable using argument 
types (const(S)) const

While one can give 'const' attribute to the copy constructor, the hidden 
argument still remains non-constant. The same question: do constant copy 
constructors make sense?

This is a serious problem. Please comment.
Aug 02 2010