--Dear team,
I have a proposal to introduce an optional default-initializer for enum types.
For me it looks like currently an enum variable is by default initialized with a default value of the underlying type.
Code example:
#include <iostream>
enum TestEnum {
good = -100,
bad = 200
};
int main()
{
TestEnum h;
std::cout << h << std::endl;
return 0;
}
Output: 0
The resulting value 0 is neither of the range ones.
The proposal is to have a way to specify the default one.
See the possible example below:
#include <iostream>
enum TestEnum {
good = -100,
bad = 200
default:
bad
};
int main()
{
TestEnum h;
std::cout << h << std::endl;
return 0;
}
Output: 200
Why I brought this up.
I've seen lots of code using kind of an enum below:
enum SomeEnum {
Good = 0,
SomeOption1,
// some other values ...
SomeOptionN,
Invalid
};
Any class/struct having this enum as a member could potentially initialize it by default to Good leading to a customer of this thinking the object is in a 'Good' shape althought it's just in some 'default' one.
Changing that to:
enum SomeEnum {
Good,
SomeOption1,
// some other values ...
SomeOptionN,
Invalid
default:
Invalid
};
could prevent errors of using non-initialized objects.
Having the 'default' initializer could decrease a number of errors with incomplete/improper initialization.
Please let me know if this makes sense to your opinion.
Kind regards,
Aleksej Penkov
BMW Group
Aleksej Penkov
BMW Car IT
JC-6
Senior Software Engineer
Lise-Meitner-Straße 14
89081 Ulm
Telephone: +4973137804118
Mobile: +491742685058
Mail: aleksej.penkov@bmw.de
-------------------------------------------------------------------------
BMW Car IT GmbH
Management: Chris Brandt and Michael Böttrich
Domicile and Court of Registry: München HRB 134810
-------------------------------------------------------------------------
Std-Proposals mailing list
Std-Proposals@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals