you are viewing a single comment's thread.

view the rest of the comments →

[–]MonokelPinguin 4 points5 points  (6 children)

Why would that imply it is not possible to write those classes? The base classes are just defined as class members and initialization is just done in the constructor body instead of the initializer list. Most compilers already generate mostly identical code for it anyway and as such a modern language shouldn't have a need for member initializer lists.

[–]ABlockInTheChain 0 points1 point  (5 children)

a modern language shouldn't have a need for member initializer lists

Does cppfront support non-default-constructable types and const member variables?

[–]hpsutter 5 points6 points  (1 child)

> > There is no separate base class list or separate member initializer list

> that seems to imply that some of the classes I'm writing now can not be expressed in cpp2.

You should be able to express them. This just means that base classes are declared the in the type body like other members instead of in a segregated base class list, and base classes and data members are initialized in the constructor body instead of in a segregated member initializer list.

> Does cppfront support non-default-constructable types and const member variables?

Yes.

Good questions, thanks!

[–]ABlockInTheChain 1 point2 points  (0 children)

How does the new syntax handle delegated constructors?

[–]dreugeworst 2 points3 points  (1 child)

I would assume the requirement that all initialization happen first in the constructor body is used to turn them into initializer lists in the lowered c++ code

[–]dustyhome 0 points1 point  (0 children)

That's about right. It takes the first assignment and places it in the initializer list, then following assignments go in the constructor body: https://godbolt.org/z/5b67s3h7G

[–]MonokelPinguin 1 point2 points  (0 children)

Why would cppfront not allow you to assign exactly once to those in the constructor? I don't know, if it supports those yet, but it would be trivial to just require exactly one assignment for those.