diff --git a/samples/monster_generated.h b/samples/monster_generated.h index b761d6fca60a55d86a5f62e9a78af54b442ccd1b..878a7688b6a165aec0457c0724eb42df6e0262ff 100644 --- a/samples/monster_generated.h +++ b/samples/monster_generated.h @@ -23,7 +23,7 @@ inline const char **EnumNamesColor() { return names; } -inline const char *EnumNameColor(Color e) { return EnumNamesColor()[e]; } +inline const char *EnumNameColor(Color e) { return EnumNamesColor()[static_cast<int>(e)]; } enum Any { Any_NONE = 0, @@ -35,7 +35,7 @@ inline const char **EnumNamesAny() { return names; } -inline const char *EnumNameAny(Any e) { return EnumNamesAny()[e]; } +inline const char *EnumNameAny(Any e) { return EnumNamesAny()[static_cast<int>(e)]; } inline bool VerifyAny(flatbuffers::Verifier &verifier, const void *union_obj, Any type); diff --git a/src/idl_parser.cpp b/src/idl_parser.cpp index 077320bfadd4542e53c73dc55e36beb74360a09f..d5aa31201ea3631a39678e2527f6e4726f9b17e0 100644 --- a/src/idl_parser.cpp +++ b/src/idl_parser.cpp @@ -1080,7 +1080,7 @@ void Parser::ParseProtoDecl() { Expect(kTokenIntegerConstant); auto &field = AddField(struct_def, name, type); field.doc_comment = field_comment; - field.required = required; + if (!IsScalar(type.base_type)) field.required = required; // See if there's a default specified. if (IsNext('[')) { if (attribute_ != "default") Error("\'default\' expected"); diff --git a/tests/monster_test_generated.h b/tests/monster_test_generated.h index c468b1082d887a5f521e337f011fb35dc72b4c0d..6564a9bd77dbc1a55bc96bed4ad0b0f8e13f9027 100644 --- a/tests/monster_test_generated.h +++ b/tests/monster_test_generated.h @@ -31,7 +31,7 @@ inline const char **EnumNamesColor() { return names; } -inline const char *EnumNameColor(Color e) { return EnumNamesColor()[e - Color_Red]; } +inline const char *EnumNameColor(Color e) { return EnumNamesColor()[static_cast<int>(e) - static_cast<int>(Color_Red)]; } enum Any { Any_NONE = 0, @@ -44,7 +44,7 @@ inline const char **EnumNamesAny() { return names; } -inline const char *EnumNameAny(Any e) { return EnumNamesAny()[e]; } +inline const char *EnumNameAny(Any e) { return EnumNamesAny()[static_cast<int>(e)]; } inline bool VerifyAny(flatbuffers::Verifier &verifier, const void *union_obj, Any type);