What would break if class was merged with struct

Ola Fosheim Grøstad via Digitalmars-d digitalmars-d at puremagic.com
Sun May 28 07:30:00 PDT 2017


On Sunday, 28 May 2017 at 12:31:35 UTC, Iain Buclaw wrote:
> I said it all in one breath, so you could leave it up to 
> interpretation whether they applauded the fact that there is a 
> separation in semantics, or whether there is no multiple 
> inheritance in D (except via interfaces).
>
> When asking one person over dinner later about what they felt 
> was wrong about struct/class in C++, I got the impression that 
> because there's almost no distinction between the two, class 
> seems more like a misfeature of C++.

Well, class and struct is semantically the same in C++. The only 
difference is that you don't have private and protected on 
structs. So the distinction is historical, to quote 
cppreference.com: «The keywords are identical except for the 
default member access and the default base class access.»

> You could say that C++ should have stuck to one type, instead 
> of having two.

Struct and class is one type in C++. The difference is in the 
syntax where the grammar does not allow access protection for the 
struct keyword. So not semantical, but syntactical.

> And because in D we make a very clear distinction, that 
> justifies the reason to have both struct and class.

But you don't make a very clear distinction in D.  If struct was 
a pure value type and mapped to pure valued tuples, then you 
might have a justification for it. From a type-system point of 
view the distinction makes no sense to me.



More information about the Digitalmars-d mailing list