const and immutable values, D vs C++?

Ola Fosheim Grøstad ola.fosheim.grostad at
Thu Dec 5 10:41:24 UTC 2019

I also find the following behaviour a bit unclear:

struct node0 {int value; node0* next;}
struct node1 {int value; const(node1)* next;}
struct node2 {int value; immutable(node0)* next;}

T mk(T)(){
     T tmp = {2019, null};
     return tmp;

node1 mk_node1(){
     node1 tmp = {2019, null};
     return tmp;

node2 mk_node2(){
     node2 tmp = {2019, null};
     return tmp;

void main() {
     immutable x0 = mk!node0();  //succeeds?
     immutable x1 = mk!node1();  //succeeds?
     immutable x2 = mk!node2();  //succeeds?
     immutable y1 = mk_node1();  //fails
     immutable y2 = mk_node2();  //succeeds, so only first child 
has to be immutable?

More information about the Digitalmars-d-learn mailing list