c++11 enum syntax ok in DMD headers ?
S.G
SG at somewhere.sg
Sat Nov 23 12:54:30 UTC 2019
On Friday, 22 November 2019 at 08:29:07 UTC, Iain Buclaw wrote:
> -------- Original Message --------
> On Nov 22, 2019, 8:55 AM, S.G via D.gnu < d.gnu at puremagic.com>
> wrote:
> Hello, I've seen that many D enum are still typed as int because
> of the c++ headers but c++11 allow things like
> enum Stuff: unsigned char { ... }
> Is is ok to use this in the headers ?
>
> The baseline bootstrapping compiler is C++98.
>
> You don't have to type D enums as int, but the base type must
> be used explicitly if you want to use them as parameters or
> fields, which defeats some purposes of having the enum in the
> first place.
>
> Work on autogenerating C++ headers should render this mostly
> redundant (people want freedom to pick their std version),
> apart from the not being able to use these enums as parameters
> due to ABI/mangling incompatibilities.
>
> --
> Iain
Thanks for the quick replying, even if a bit disapointing.
The reason why I asked is because I'd like to avoid cases where
the enum type is used directly and that creates an alignment
issue that implies memory overhead, i.e
enum SomeEnumeratedType // could be `ubyte` or `unsigned char`
{
member1, member2, member3
}
class Stuff
{
ubyte[7] allTheOtherMembers; //let's say
SomeEnumeratedType someEnumeratedType // now a Stuff instance
takes 16 bytes
// because
SomeEnumeratedType takes 4 bytes...
}
More information about the D.gnu
mailing list