Add flatc '--cpp_std' switch (#5656)

* Add flatc '--cpp_std' switch and sandbox for C++17 code generator

- Added 'flac --cpp_std legacy' for compatibility with old compilers (VS2010);
- Added experimental switch 'flac --cpp_std c++17' for future development;
- Added C++17 sandbox test_cpp17.cpp;
- C++ code generator generates enums with explicit underlying type to avoid problems with the forward and backward schema compatibility;
- Adjusted CMakeLists.txt, CI and generate code scripts to support of introduced '--cpp_std';

* Fix --cpp_std values: c++0x, c++11, c++17

* Add 'cpp::CppStandard' enum

* Add testing engine into test_cpp17

* Rebase to upstream/master

* Set default '--cpp-std C++0x'

* Fix code generation (--cpp_std C++11) in CMakeLists.txt

- Fix dependency declaration of grpctest target

* Revert --cpp-std for the tests from explicit C++11 to flatc default value (C++0x)
This commit is contained in:
Vladimir Glavnyy
2019-12-24 03:13:48 +07:00
committed by Wouter van Oortmerssen
parent 3e8f15df90
commit 44bf719883
41 changed files with 4363 additions and 254 deletions

View File

@@ -136,7 +136,7 @@ inline const char * const *EnumNamesColor() {
}
inline const char *EnumNameColor(Color e) {
if (e < Color_Red || e > Color_Blue) return "";
if (flatbuffers::IsOutRange(e, Color_Red, Color_Blue)) return "";
const size_t index = static_cast<size_t>(e) - static_cast<size_t>(Color_Red);
return EnumNamesColor()[index];
}
@@ -172,7 +172,7 @@ inline const char * const *EnumNamesRace() {
}
inline const char *EnumNameRace(Race e) {
if (e < Race_None || e > Race_Elf) return "";
if (flatbuffers::IsOutRange(e, Race_None, Race_Elf)) return "";
const size_t index = static_cast<size_t>(e) - static_cast<size_t>(Race_None);
return EnumNamesRace()[index];
}
@@ -208,7 +208,7 @@ inline const char * const *EnumNamesAny() {
}
inline const char *EnumNameAny(Any e) {
if (e < Any_NONE || e > Any_MyGame_Example2_Monster) return "";
if (flatbuffers::IsOutRange(e, Any_NONE, Any_MyGame_Example2_Monster)) return "";
const size_t index = static_cast<size_t>(e);
return EnumNamesAny()[index];
}
@@ -350,7 +350,7 @@ inline const char * const *EnumNamesAnyUniqueAliases() {
}
inline const char *EnumNameAnyUniqueAliases(AnyUniqueAliases e) {
if (e < AnyUniqueAliases_NONE || e > AnyUniqueAliases_M2) return "";
if (flatbuffers::IsOutRange(e, AnyUniqueAliases_NONE, AnyUniqueAliases_M2)) return "";
const size_t index = static_cast<size_t>(e);
return EnumNamesAnyUniqueAliases()[index];
}
@@ -492,7 +492,7 @@ inline const char * const *EnumNamesAnyAmbiguousAliases() {
}
inline const char *EnumNameAnyAmbiguousAliases(AnyAmbiguousAliases e) {
if (e < AnyAmbiguousAliases_NONE || e > AnyAmbiguousAliases_M3) return "";
if (flatbuffers::IsOutRange(e, AnyAmbiguousAliases_NONE, AnyAmbiguousAliases_M3)) return "";
const size_t index = static_cast<size_t>(e);
return EnumNamesAnyAmbiguousAliases()[index];
}