#include <cstdint>
using namespace std;
class cmw_user_input_data_member_flags {
public:
enum E : int16_t {
default_ = 0x0,
headers = 0x1,
middlefile = 0x2,
choices = 0x4
};
constexpr cmw_user_input_data_member_flags() noexcept {};
constexpr explicit cmw_user_input_data_member_flags(E v) noexcept : val{v} {};
cmw_user_input_data_member_flags(const cmw_user_input_data_member_flags& o)
noexcept : val{o.val} {};
cmw_user_input_data_member_flags& operator=(E v) noexcept
{val = v; return *this;};
cmw_user_input_data_member_flags&
operator=(cmw_user_input_data_member_flags& o) noexcept
{val = o.val; return *this;};
operator E() const noexcept {return val;};
protected:
E val{default_};
private:
//operator int() const; // eventually
};
int main() {
using Flags = cmw_user_input_data_member_flags;
Flags x{Flags::headers};
//Flags y{0x1}; // not valid
Flags z;
z = Flags::choices;
}
I2luY2x1ZGUgPGNzdGRpbnQ+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBjbXdfdXNlcl9pbnB1dF9kYXRhX21lbWJlcl9mbGFncyB7CnB1YmxpYzoKICAgIGVudW0gRSA6IGludDE2X3QgewogICAgICAgIGRlZmF1bHRfID0gMHgwLAogICAgICAgIGhlYWRlcnMgPSAweDEsCiAgICAgICAgbWlkZGxlZmlsZSA9IDB4MiwKICAgICAgICBjaG9pY2VzID0gMHg0CiAgICB9OwogICAgY29uc3RleHByIGNtd191c2VyX2lucHV0X2RhdGFfbWVtYmVyX2ZsYWdzKCkgbm9leGNlcHQge307CiAgICBjb25zdGV4cHIgZXhwbGljaXQgY213X3VzZXJfaW5wdXRfZGF0YV9tZW1iZXJfZmxhZ3MoRSB2KSBub2V4Y2VwdCA6IHZhbHt2fSB7fTsKCiAgICBjbXdfdXNlcl9pbnB1dF9kYXRhX21lbWJlcl9mbGFncyhjb25zdCBjbXdfdXNlcl9pbnB1dF9kYXRhX21lbWJlcl9mbGFncyYgbykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9leGNlcHQgOiB2YWx7by52YWx9IHt9OwoKICAgIGNtd191c2VyX2lucHV0X2RhdGFfbWVtYmVyX2ZsYWdzJiBvcGVyYXRvcj0oRSB2KSBub2V4Y2VwdCAKICAgICAgICB7dmFsID0gdjsgcmV0dXJuICp0aGlzO307CgogICAgY213X3VzZXJfaW5wdXRfZGF0YV9tZW1iZXJfZmxhZ3MmIAogICAgICAgIG9wZXJhdG9yPShjbXdfdXNlcl9pbnB1dF9kYXRhX21lbWJlcl9mbGFncyYgbykgbm9leGNlcHQgCiAgICAgICAge3ZhbCA9IG8udmFsOyByZXR1cm4gKnRoaXM7fTsKCiAgICBvcGVyYXRvciBFKCkgY29uc3Qgbm9leGNlcHQge3JldHVybiB2YWw7fTsKcHJvdGVjdGVkOgogICAgRSB2YWx7ZGVmYXVsdF99Owpwcml2YXRlOgogICAgLy9vcGVyYXRvciBpbnQoKSBjb25zdDsgLy8gZXZlbnR1YWxseQp9OwoKaW50IG1haW4oKSB7CiAgICB1c2luZyBGbGFncyA9IGNtd191c2VyX2lucHV0X2RhdGFfbWVtYmVyX2ZsYWdzOwogICAgRmxhZ3MgeHtGbGFnczo6aGVhZGVyc307CiAgICAvL0ZsYWdzIHl7MHgxfTsgLy8gbm90IHZhbGlkCiAgICBGbGFncyB6OwogICAgeiA9IEZsYWdzOjpjaG9pY2VzOwp9Cg==