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.