diff --git a/samples/monster_generated.h b/samples/monster_generated.h index e89ec3a51..d9d64793d 100644 --- a/samples/monster_generated.h +++ b/samples/monster_generated.h @@ -119,12 +119,12 @@ struct EquipmentUnion { void Reset(); #ifndef FLATBUFFERS_CPP98_STL - template + template ::type> void Set(T&& val) { Reset(); - type = EquipmentTraits::enum_value; + type = EquipmentTraits::enum_value; if (type != Equipment_NONE) { - value = new T(std::forward(val)); + value = new RT(std::forward(val)); } } #endif // FLATBUFFERS_CPP98_STL diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index 17da0693e..0c964d4bc 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -1096,13 +1096,12 @@ class CppGenerator : public BaseGenerator { code_ += ""; if (!enum_def.uses_multiple_type_instances) { code_ += "#ifndef FLATBUFFERS_CPP98_STL"; - code_ += " template "; + code_ += " template ::type>"; code_ += " void Set(T&& val) {"; code_ += " Reset();"; - code_ += - " type = {{NAME}}Traits::enum_value;"; + code_ += " type = {{NAME}}Traits::enum_value;"; code_ += " if (type != {{NONE}}) {"; - code_ += " value = new T(std::forward(val));"; + code_ += " value = new RT(std::forward(val));"; code_ += " }"; code_ += " }"; code_ += "#endif // FLATBUFFERS_CPP98_STL"; diff --git a/tests/monster_test_generated.h b/tests/monster_test_generated.h index f98e86b71..a55a42754 100644 --- a/tests/monster_test_generated.h +++ b/tests/monster_test_generated.h @@ -207,12 +207,12 @@ struct AnyUnion { void Reset(); #ifndef FLATBUFFERS_CPP98_STL - template + template ::type> void Set(T&& val) { Reset(); - type = AnyTraits::enum_value; + type = AnyTraits::enum_value; if (type != Any_NONE) { - value = new T(std::forward(val)); + value = new RT(std::forward(val)); } } #endif // FLATBUFFERS_CPP98_STL @@ -348,12 +348,12 @@ struct AnyUniqueAliasesUnion { void Reset(); #ifndef FLATBUFFERS_CPP98_STL - template + template ::type> void Set(T&& val) { Reset(); - type = AnyUniqueAliasesTraits::enum_value; + type = AnyUniqueAliasesTraits::enum_value; if (type != AnyUniqueAliases_NONE) { - value = new T(std::forward(val)); + value = new RT(std::forward(val)); } } #endif // FLATBUFFERS_CPP98_STL