diff --git a/include/flatbuffers/flatbuffers.h b/include/flatbuffers/flatbuffers.h index 5de3a6611..b6260b6d5 100644 --- a/include/flatbuffers/flatbuffers.h +++ b/include/flatbuffers/flatbuffers.h @@ -1485,21 +1485,17 @@ volatile __attribute__((weak)) const char *flatbuffer_version_string = #endif // !defined(_WIN32) && !defined(__CYGWIN__) -#define DEFINE_BITMASK_OPERATORS(E)\ +#define DEFINE_BITMASK_OPERATORS(E, T)\ inline E operator | (E lhs, E rhs){\ - using T = std::underlying_type::type;\ return E(T(lhs) | T(rhs));\ }\ inline E operator & (E lhs, E rhs){\ - using T = std::underlying_type::type;\ return E(T(lhs) & T(rhs));\ }\ inline E operator ^ (E lhs, E rhs){\ - using T = std::underlying_type::type;\ return E(T(lhs) ^ T(rhs));\ }\ inline E operator ~ (E lhs){\ - using T = std::underlying_type::type;\ return E(~T(lhs));\ }\ inline E operator |= (E &lhs, E rhs){\ diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index f0daca26a..f045fe4a5 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -184,7 +184,7 @@ static void GenEnum(const Parser &parser, EnumDef &enum_def, code += GenEnumVal(enum_def, maxv->name, parser.opts) + "\n"; code += "};\n"; if (parser.opts.scoped_enums && enum_def.attributes.Lookup("bit_flags")) - code += "DEFINE_BITMASK_OPERATORS(" + enum_def.name + ")\n"; + code += "DEFINE_BITMASK_OPERATORS(" + enum_def.name + ", " + GenTypeBasic(enum_def.underlying_type, false) + ")\n"; code += "\n"; // Generate a generate string table for enum values.