mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-21 18:18:27 +00:00
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:
committed by
Wouter van Oortmerssen
parent
3e8f15df90
commit
44bf719883
@@ -21,10 +21,19 @@ template<class T, class U> struct is_same { static const bool value = false; };
|
||||
|
||||
template<class T> struct is_same<T, T> { static const bool value = true; };
|
||||
|
||||
extern const std::string m1_name;
|
||||
extern const Color m1_color;
|
||||
extern const std::string m2_name;
|
||||
extern const Color m2_color;
|
||||
inline std::string m1_name() { return "Cyberdemon"; }
|
||||
inline std::string m2_name() { return "Imp"; }
|
||||
inline MyGame::Example::Color m1_color() {
|
||||
return MyGame::Example::Color_Red;
|
||||
}
|
||||
inline MyGame::Example::Color m2_color() {
|
||||
return MyGame::Example::Color_Green;
|
||||
}
|
||||
inline void m1_color_check() {
|
||||
// Ensure that all compilation units see the same monster_test_generated.h.
|
||||
extern void CheckTestGeneratedIsValid(const MyGame::Example::Color&);
|
||||
CheckTestGeneratedIsValid(m1_color());
|
||||
}
|
||||
|
||||
flatbuffers::Offset<Monster> populate1(flatbuffers::FlatBufferBuilder &builder);
|
||||
flatbuffers::Offset<Monster> populate2(flatbuffers::FlatBufferBuilder &builder);
|
||||
@@ -66,7 +75,7 @@ void builder_move_assign_after_releaseraw_test(Builder b1) {
|
||||
// Move into a released builder.
|
||||
b1 = std::move(src);
|
||||
TEST_EQ_FUNC(b1.GetSize(), src_size);
|
||||
TEST_ASSERT_FUNC(release_n_verify(b1, m2_name, m2_color));
|
||||
TEST_ASSERT_FUNC(release_n_verify(b1, m2_name(), m2_color()));
|
||||
TEST_EQ_FUNC(src.GetSize(), 0);
|
||||
}
|
||||
// clang-format off
|
||||
@@ -104,7 +113,7 @@ struct BuilderTests {
|
||||
auto root_offset1 = populate1(src);
|
||||
DestBuilder dst(std::move(src));
|
||||
dst.Finish(root_offset1);
|
||||
TEST_ASSERT_FUNC(release_n_verify(dst, m1_name, m1_color));
|
||||
TEST_ASSERT_FUNC(release_n_verify(dst, m1_name(), m1_color()));
|
||||
TEST_EQ_FUNC(src.GetSize(), 0);
|
||||
}
|
||||
|
||||
@@ -115,7 +124,7 @@ struct BuilderTests {
|
||||
auto src_size = src.GetSize();
|
||||
DestBuilder dst(std::move(src));
|
||||
TEST_EQ_FUNC(dst.GetSize(), src_size);
|
||||
TEST_ASSERT_FUNC(release_n_verify(dst, m1_name, m1_color));
|
||||
TEST_ASSERT_FUNC(release_n_verify(dst, m1_name(), m1_color()));
|
||||
TEST_EQ_FUNC(src.GetSize(), 0);
|
||||
}
|
||||
|
||||
@@ -126,7 +135,7 @@ struct BuilderTests {
|
||||
populate2(dst);
|
||||
dst = std::move(src);
|
||||
dst.Finish(root_offset1);
|
||||
TEST_ASSERT_FUNC(release_n_verify(dst, m1_name, m1_color));
|
||||
TEST_ASSERT_FUNC(release_n_verify(dst, m1_name(), m1_color()));
|
||||
TEST_EQ_FUNC(src.GetSize(), 0);
|
||||
}
|
||||
|
||||
@@ -140,7 +149,7 @@ struct BuilderTests {
|
||||
dst.Finish(root_offset2);
|
||||
dst = std::move(src);
|
||||
TEST_EQ_FUNC(dst.GetSize(), src_size);
|
||||
TEST_ASSERT_FUNC(release_n_verify(dst, m1_name, m1_color));
|
||||
TEST_ASSERT_FUNC(release_n_verify(dst, m1_name(), m1_color()));
|
||||
TEST_EQ_FUNC(src.GetSize(), 0);
|
||||
}
|
||||
|
||||
@@ -159,7 +168,7 @@ struct BuilderTests {
|
||||
// Move into a released builder.
|
||||
dst = std::move(src);
|
||||
TEST_EQ_FUNC(dst.GetSize(), src_size);
|
||||
TEST_ASSERT_FUNC(release_n_verify(dst, m2_name, m2_color));
|
||||
TEST_ASSERT_FUNC(release_n_verify(dst, m2_name(), m2_color()));
|
||||
TEST_EQ_FUNC(src.GetSize(), 0);
|
||||
}
|
||||
// clang-format off
|
||||
@@ -181,8 +190,8 @@ struct BuilderTests {
|
||||
dst.Finish(root_offset1);
|
||||
TEST_EQ_FUNC(src.GetSize() > size2, true);
|
||||
TEST_EQ_FUNC(dst.GetSize() > size1, true);
|
||||
TEST_ASSERT_FUNC(release_n_verify(src, m2_name, m2_color));
|
||||
TEST_ASSERT_FUNC(release_n_verify(dst, m1_name, m1_color));
|
||||
TEST_ASSERT_FUNC(release_n_verify(src, m2_name(), m2_color()));
|
||||
TEST_ASSERT_FUNC(release_n_verify(dst, m1_name(), m1_color()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -201,8 +210,8 @@ struct BuilderTests {
|
||||
src.Swap(dst);
|
||||
TEST_EQ_FUNC(src.GetSize(), size2);
|
||||
TEST_EQ_FUNC(dst.GetSize(), size1);
|
||||
TEST_ASSERT_FUNC(release_n_verify(src, m2_name, m2_color));
|
||||
TEST_ASSERT_FUNC(release_n_verify(dst, m1_name, m1_color));
|
||||
TEST_ASSERT_FUNC(release_n_verify(src, m2_name(), m2_color()));
|
||||
TEST_ASSERT_FUNC(release_n_verify(dst, m1_name(), m1_color()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -247,7 +256,7 @@ template<class DestBuilder, class SrcBuilder> struct BuilderReuseTests {
|
||||
auto root_offset1 = populate1(fbb);
|
||||
fbb.Finish(root_offset1);
|
||||
buffers.push_back(fbb.Release());
|
||||
TEST_ASSERT_FUNC(verify(buffers[i], m1_name, m1_color));
|
||||
TEST_ASSERT_FUNC(verify(buffers[i], m1_name(), m1_color()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -260,7 +269,7 @@ template<class DestBuilder, class SrcBuilder> struct BuilderReuseTests {
|
||||
fbb.Finish(root_offset1);
|
||||
size_t size, offset;
|
||||
uint8_t *buf = release_raw_base(fbb, size, offset);
|
||||
TEST_ASSERT_FUNC(verify(buf, offset, m1_name, m1_color));
|
||||
TEST_ASSERT_FUNC(verify(buf, offset, m1_name(), m1_color()));
|
||||
free_raw(fbb, buf);
|
||||
}
|
||||
}
|
||||
@@ -278,7 +287,7 @@ template<class DestBuilder, class SrcBuilder> struct BuilderReuseTests {
|
||||
auto root_offset1 = populate1(dst);
|
||||
dst.Finish(root_offset1);
|
||||
buffers.push_back(dst.Release());
|
||||
TEST_ASSERT_FUNC(verify(buffers[i], m1_name, m1_color));
|
||||
TEST_ASSERT_FUNC(verify(buffers[i], m1_name(), m1_color()));
|
||||
SrcBuilder src;
|
||||
dst = std::move(src);
|
||||
TEST_EQ_FUNC(src.GetSize(), 0);
|
||||
@@ -295,7 +304,7 @@ template<class DestBuilder, class SrcBuilder> struct BuilderReuseTests {
|
||||
dst.Finish(root_offset1);
|
||||
size_t size, offset;
|
||||
uint8_t *buf = release_raw_base(dst, size, offset);
|
||||
TEST_ASSERT_FUNC(verify(buf, offset, m1_name, m1_color));
|
||||
TEST_ASSERT_FUNC(verify(buf, offset, m1_name(), m1_color()));
|
||||
free_raw(dst, buf);
|
||||
SrcBuilder src;
|
||||
dst = std::move(src);
|
||||
|
||||
Reference in New Issue
Block a user