Ver Fonte

Removed use of some type traits

Pre-5.1.0 versions of GCC do not support these particular type traits
(see https://github.com/google/protobuf/issues/417).
Adam Cozzette há 7 anos atrás
pai
commit
616fe05fc3

+ 1 - 1
src/google/protobuf/arena.h

@@ -333,7 +333,7 @@ class LIBPROTOBUF_EXPORT Arena {
   template <typename T>
   GOOGLE_PROTOBUF_ATTRIBUTE_ALWAYS_INLINE static T* CreateArray(
       Arena* arena, size_t num_elements) {
-    static_assert(std::is_trivially_default_constructible<T>::value,
+    static_assert(std::is_pod<T>::value,
                   "CreateArray requires a trivially constructible type");
     static_assert(std::is_trivially_destructible<T>::value,
                   "CreateArray requires a trivially destructible type");

+ 3 - 3
src/google/protobuf/generated_message_table_driven_lite.h

@@ -100,7 +100,7 @@ inline ExtensionSet* GetExtensionSet(MessageLite* msg, int64 extension_offset) {
 
 template <typename Type>
 inline Type* AddField(MessageLite* msg, int64 offset) {
-  static_assert(std::is_trivially_copy_assignable<Type>::value ||
+  static_assert(std::is_pod<Type>::value ||
                 std::is_same<Type, InlinedStringField>::value,
                 "Do not assign");
 
@@ -119,7 +119,7 @@ inline string* AddField<string>(MessageLite* msg, int64 offset) {
 
 template <typename Type>
 inline void AddField(MessageLite* msg, int64 offset, Type value) {
-  static_assert(std::is_trivially_copy_assignable<Type>::value,
+  static_assert(std::is_pod<Type>::value,
                 "Do not assign");
   *AddField<Type>(msg, offset) = value;
 }
@@ -141,7 +141,7 @@ inline Type* MutableField(MessageLite* msg, uint32* has_bits,
 template <typename Type>
 inline void SetField(MessageLite* msg, uint32* has_bits, uint32 has_bit_index,
                      int64 offset, Type value) {
-  static_assert(std::is_trivially_copy_assignable<Type>::value,
+  static_assert(std::is_pod<Type>::value,
                 "Do not assign");
   *MutableField<Type>(msg, has_bits, has_bit_index, offset) = value;
 }

+ 1 - 1
src/google/protobuf/repeated_field.h

@@ -351,7 +351,7 @@ namespace internal {
 // effectively.
 template <typename Element,
           bool HasTrivialCopy =
-              std::is_trivially_copy_constructible<Element>::value>
+              std::is_pod<Element>::value>
 struct ElementCopier {
   void operator()(Element* to, const Element* from, int array_size);
 };