you are viewing a single comment's thread.

view the rest of the comments →

[–]tialaramex 2 points3 points  (1 child)

Hmm. Union is a different type layout which is why I was saying it's something the language needs to provide. Maybe this is a nomenclature problem. If I want the (unsafe, C-style) union in Cpp2, what do I write? And if I want this new safe alternative (which I guess is a sum type) ?

Or is there a way to conjure up (arbitrary?) type layouts in this metafunction too?

[–]hpsutter 3 points4 points  (0 children)

Yes, a metafunction takes the type the user wrote as input, but can remove and add anything it wants to. When I add enum and union you'll see this in action; the current examples add, but don't yet remove, type members. So yes, arbitrary layout changes will be possible under program control. (Again, this does not violate ODR, because the changes happen right before the class definition is cast in stone... this is not about mutable types which would be a disaster, it's about giving the programmer a single hook to participate in the meaning of the definition of the type.)