From 6b271b7ecb388bf66a90016af93b3bb1fb359265 Mon Sep 17 00:00:00 2001 From: Arthur O'Dwyer Date: Mon, 23 Mar 2020 13:01:11 -0400 Subject: [PATCH] Fix Clang-trunk warnings about special members deprecated in C++20. (#5829) For example: include/flatbuffers/reflection.h:365:8: error: definition of implicit copy constructor for 'pointer_inside_vector' is deprecated because it has a user-declared copy assignment operator [-Werror,-Wdeprecated-copy] void operator=(const pointer_inside_vector &piv); ^ It's unclear why the old code wanted to declare a public `operator=` without defining it; that just seems like a misunderstanding of the C++03 idiom for deleting a member function. And anyway, we don't *want* to delete the assignment operator; these are polymorphic types that do not follow value semantics and nobody should ever be trying to copy them. So the simplest fix is just to go back to the Rule of Zero: remove the declaration of `operator=` and let the compiler do what it wanted to do originally anyway. "The best code is no code." Also, update the generated .h files. Fixes #5649. --- include/flatbuffers/reflection.h | 1 - include/flatbuffers/reflection_generated.h | 9 --------- samples/monster_generated.h | 2 -- src/idl_gen_cpp.cpp | 5 ----- src/reflection.cpp | 2 -- tests/arrays_test_generated.h | 1 - tests/cpp17/generated_cpp17/monster_test_generated.h | 7 ------- tests/evolution_test/evolution_v1_generated.h | 3 --- tests/evolution_test/evolution_v2_generated.h | 4 ---- tests/monster_extra_generated.h | 1 - tests/monster_test_generated.h | 7 ------- tests/namespace_test/namespace_test1_generated.h | 1 - tests/namespace_test/namespace_test2_generated.h | 3 --- tests/native_type_test_generated.h | 1 - tests/union_vector/union_vector_generated.h | 2 -- 15 files changed, 49 deletions(-) diff --git a/include/flatbuffers/reflection.h b/include/flatbuffers/reflection.h index f606b7b5e..1c49234fc 100644 --- a/include/flatbuffers/reflection.h +++ b/include/flatbuffers/reflection.h @@ -362,7 +362,6 @@ template class pointer_inside_vector { reinterpret_cast(flatbuffers::vector_data(vec_)) + offset_); } T *operator->() const { return operator*(); } - void operator=(const pointer_inside_vector &piv); private: size_t offset_; diff --git a/include/flatbuffers/reflection_generated.h b/include/flatbuffers/reflection_generated.h index e7237ff24..cd783793c 100644 --- a/include/flatbuffers/reflection_generated.h +++ b/include/flatbuffers/reflection_generated.h @@ -161,7 +161,6 @@ struct TypeBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - TypeBuilder &operator=(const TypeBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -225,7 +224,6 @@ struct KeyValueBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - KeyValueBuilder &operator=(const KeyValueBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -325,7 +323,6 @@ struct EnumValBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - EnumValBuilder &operator=(const EnumValBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -448,7 +445,6 @@ struct EnumBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - EnumBuilder &operator=(const EnumBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -617,7 +613,6 @@ struct FieldBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - FieldBuilder &operator=(const FieldBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -773,7 +768,6 @@ struct ObjectBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - ObjectBuilder &operator=(const ObjectBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -898,7 +892,6 @@ struct RPCCallBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - RPCCallBuilder &operator=(const RPCCallBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -1007,7 +1000,6 @@ struct ServiceBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - ServiceBuilder &operator=(const ServiceBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -1123,7 +1115,6 @@ struct SchemaBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - SchemaBuilder &operator=(const SchemaBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); diff --git a/samples/monster_generated.h b/samples/monster_generated.h index 4e49d5f9f..00aa70b02 100644 --- a/samples/monster_generated.h +++ b/samples/monster_generated.h @@ -402,7 +402,6 @@ struct MonsterBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - MonsterBuilder &operator=(const MonsterBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -536,7 +535,6 @@ struct WeaponBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - WeaponBuilder &operator=(const WeaponBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index f78ee268f..8c6e27c93 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -2228,11 +2228,6 @@ class CppGenerator : public BaseGenerator { code_ += " start_ = fbb_.StartTable();"; code_ += " }"; - // Assignment operator; - code_ += - " {{STRUCT_NAME}}Builder &operator=" - "(const {{STRUCT_NAME}}Builder &);"; - // Finish() function. code_ += " flatbuffers::Offset<{{STRUCT_NAME}}> Finish() {"; code_ += " const auto end = fbb_.EndTable(start_);"; diff --git a/src/reflection.cpp b/src/reflection.cpp index abe9bb5d0..70267c111 100644 --- a/src/reflection.cpp +++ b/src/reflection.cpp @@ -296,8 +296,6 @@ class ResizeContext { } } - void operator=(const ResizeContext &rc); - private: const reflection::Schema &schema_; uint8_t *startptr_; diff --git a/tests/arrays_test_generated.h b/tests/arrays_test_generated.h index 30e788462..66599d180 100644 --- a/tests/arrays_test_generated.h +++ b/tests/arrays_test_generated.h @@ -264,7 +264,6 @@ struct ArrayTableBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - ArrayTableBuilder &operator=(const ArrayTableBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); diff --git a/tests/cpp17/generated_cpp17/monster_test_generated.h b/tests/cpp17/generated_cpp17/monster_test_generated.h index 359fd1a9b..043c21e89 100644 --- a/tests/cpp17/generated_cpp17/monster_test_generated.h +++ b/tests/cpp17/generated_cpp17/monster_test_generated.h @@ -642,7 +642,6 @@ struct InParentNamespaceBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - InParentNamespaceBuilder &operator=(const InParentNamespaceBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -695,7 +694,6 @@ struct MonsterBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - MonsterBuilder &operator=(const MonsterBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -765,7 +763,6 @@ struct TestSimpleTableWithEnumBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - TestSimpleTableWithEnumBuilder &operator=(const TestSimpleTableWithEnumBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -859,7 +856,6 @@ struct StatBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - StatBuilder &operator=(const StatBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -950,7 +946,6 @@ struct ReferrableBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - ReferrableBuilder &operator=(const ReferrableBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -1686,7 +1681,6 @@ struct MonsterBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - MonsterBuilder &operator=(const MonsterBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -2113,7 +2107,6 @@ struct TypeAliasesBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - TypeAliasesBuilder &operator=(const TypeAliasesBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); diff --git a/tests/evolution_test/evolution_v1_generated.h b/tests/evolution_test/evolution_v1_generated.h index 1d447ffc1..25afa6935 100644 --- a/tests/evolution_test/evolution_v1_generated.h +++ b/tests/evolution_test/evolution_v1_generated.h @@ -152,7 +152,6 @@ struct TableABuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - TableABuilder &operator=(const TableABuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -194,7 +193,6 @@ struct TableBBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - TableBBuilder &operator=(const TableBBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -326,7 +324,6 @@ struct RootBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - RootBuilder &operator=(const RootBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); diff --git a/tests/evolution_test/evolution_v2_generated.h b/tests/evolution_test/evolution_v2_generated.h index 4e1b8404d..446d9e2f8 100644 --- a/tests/evolution_test/evolution_v2_generated.h +++ b/tests/evolution_test/evolution_v2_generated.h @@ -176,7 +176,6 @@ struct TableABuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - TableABuilder &operator=(const TableABuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -233,7 +232,6 @@ struct TableBBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - TableBBuilder &operator=(const TableBBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -282,7 +280,6 @@ struct TableCBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - TableCBuilder &operator=(const TableCBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -443,7 +440,6 @@ struct RootBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - RootBuilder &operator=(const RootBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); diff --git a/tests/monster_extra_generated.h b/tests/monster_extra_generated.h index 3b4ee27ad..231d6c12e 100644 --- a/tests/monster_extra_generated.h +++ b/tests/monster_extra_generated.h @@ -197,7 +197,6 @@ struct MonsterExtraBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - MonsterExtraBuilder &operator=(const MonsterExtraBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); diff --git a/tests/monster_test_generated.h b/tests/monster_test_generated.h index ad87ffe3a..219e83576 100644 --- a/tests/monster_test_generated.h +++ b/tests/monster_test_generated.h @@ -802,7 +802,6 @@ struct InParentNamespaceBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - InParentNamespaceBuilder &operator=(const InParentNamespaceBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -858,7 +857,6 @@ struct MonsterBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - MonsterBuilder &operator=(const MonsterBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -932,7 +930,6 @@ struct TestSimpleTableWithEnumBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - TestSimpleTableWithEnumBuilder &operator=(const TestSimpleTableWithEnumBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -1032,7 +1029,6 @@ struct StatBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - StatBuilder &operator=(const StatBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -1127,7 +1123,6 @@ struct ReferrableBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - ReferrableBuilder &operator=(const ReferrableBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -1911,7 +1906,6 @@ struct MonsterBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - MonsterBuilder &operator=(const MonsterBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -2353,7 +2347,6 @@ struct TypeAliasesBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - TypeAliasesBuilder &operator=(const TypeAliasesBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); diff --git a/tests/namespace_test/namespace_test1_generated.h b/tests/namespace_test/namespace_test1_generated.h index feae671a0..721227680 100644 --- a/tests/namespace_test/namespace_test1_generated.h +++ b/tests/namespace_test/namespace_test1_generated.h @@ -153,7 +153,6 @@ struct TableInNestedNSBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - TableInNestedNSBuilder &operator=(const TableInNestedNSBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); diff --git a/tests/namespace_test/namespace_test2_generated.h b/tests/namespace_test/namespace_test2_generated.h index bb6844b88..ccb8a934c 100644 --- a/tests/namespace_test/namespace_test2_generated.h +++ b/tests/namespace_test/namespace_test2_generated.h @@ -138,7 +138,6 @@ struct TableInFirstNSBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - TableInFirstNSBuilder &operator=(const TableInFirstNSBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -232,7 +231,6 @@ struct TableInCBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - TableInCBuilder &operator=(const TableInCBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -310,7 +308,6 @@ struct SecondTableInABuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - SecondTableInABuilder &operator=(const SecondTableInABuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); diff --git a/tests/native_type_test_generated.h b/tests/native_type_test_generated.h index 911142641..d591a4e93 100644 --- a/tests/native_type_test_generated.h +++ b/tests/native_type_test_generated.h @@ -103,7 +103,6 @@ struct ApplicationDataBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - ApplicationDataBuilder &operator=(const ApplicationDataBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); diff --git a/tests/union_vector/union_vector_generated.h b/tests/union_vector/union_vector_generated.h index a03f72271..f93dbf025 100644 --- a/tests/union_vector/union_vector_generated.h +++ b/tests/union_vector/union_vector_generated.h @@ -314,7 +314,6 @@ struct AttackerBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - AttackerBuilder &operator=(const AttackerBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end); @@ -439,7 +438,6 @@ struct MovieBuilder { : fbb_(_fbb) { start_ = fbb_.StartTable(); } - MovieBuilder &operator=(const MovieBuilder &); flatbuffers::Offset Finish() { const auto end = fbb_.EndTable(start_); auto o = flatbuffers::Offset(end);