Skip to content
Snippets Groups Projects
Commit e7b03379 authored by Jakob Blomer's avatar Jakob Blomer
Browse files

fix cxx17 warning about std::iterator in protobuf

parent 2680af92
No related branches found
No related tags found
No related merge requests found
......@@ -211,6 +211,7 @@ build_lib() {
;;
protobuf)
do_extract "protobuf" "protobuf-${PROTOBUF_VERSION}.tar.bz2"
patch_external "protobuf" "fix-iterator-cxx17.patch"
do_build "protobuf"
;;
googlebench)
......
--- src/google/protobuf/repeated_field.h.orig 2022-08-06 23:20:40.617171776 +0200
+++ src/google/protobuf/repeated_field.h 2022-08-06 23:38:02.113523647 +0200
@@ -1250,23 +1250,14 @@
// This code based on net/proto/proto-array-internal.h by Jeffrey Yasskin
// (jyasskin@google.com).
template<typename Element>
-class RepeatedPtrIterator
- : public std::iterator<
- std::random_access_iterator_tag, Element> {
+class RepeatedPtrIterator {
public:
typedef RepeatedPtrIterator<Element> iterator;
- typedef std::iterator<
- std::random_access_iterator_tag, Element> superclass;
-
- // Shadow the value_type in std::iterator<> because const_iterator::value_type
- // needs to be T, not const T.
+ typedef std::random_access_iterator_tag iterator_category;
typedef typename remove_const<Element>::type value_type;
-
- // Let the compiler know that these are type names, so we don't have to
- // write "typename" in front of them everywhere.
- typedef typename superclass::reference reference;
- typedef typename superclass::pointer pointer;
- typedef typename superclass::difference_type difference_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef Element* pointer;
+ typedef Element& reference;
RepeatedPtrIterator() : it_(NULL) {}
explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
@@ -1346,22 +1337,14 @@
// referenced by the iterator. It should either be "void *" for a mutable
// iterator, or "const void *" for a constant iterator.
template<typename Element, typename VoidPtr>
-class RepeatedPtrOverPtrsIterator
- : public std::iterator<std::random_access_iterator_tag, Element*> {
+class RepeatedPtrOverPtrsIterator {
public:
typedef RepeatedPtrOverPtrsIterator<Element, VoidPtr> iterator;
- typedef std::iterator<
- std::random_access_iterator_tag, Element*> superclass;
-
- // Shadow the value_type in std::iterator<> because const_iterator::value_type
- // needs to be T, not const T.
+ typedef std::random_access_iterator_tag iterator_category;
typedef typename remove_const<Element*>::type value_type;
-
- // Let the compiler know that these are type names, so we don't have to
- // write "typename" in front of them everywhere.
- typedef typename superclass::reference reference;
- typedef typename superclass::pointer pointer;
- typedef typename superclass::difference_type difference_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef Element* pointer;
+ typedef Element& reference;
RepeatedPtrOverPtrsIterator() : it_(NULL) {}
explicit RepeatedPtrOverPtrsIterator(VoidPtr* it) : it_(it) {}
@@ -1479,8 +1462,7 @@
namespace internal {
// A back inserter for RepeatedField objects.
-template<typename T> class RepeatedFieldBackInsertIterator
- : public std::iterator<std::output_iterator_tag, T> {
+template<typename T> class RepeatedFieldBackInsertIterator {
public:
explicit RepeatedFieldBackInsertIterator(
RepeatedField<T>* const mutable_field)
@@ -1505,8 +1487,7 @@
};
// A back inserter for RepeatedPtrField objects.
-template<typename T> class RepeatedPtrFieldBackInsertIterator
- : public std::iterator<std::output_iterator_tag, T> {
+template<typename T> class RepeatedPtrFieldBackInsertIterator {
public:
RepeatedPtrFieldBackInsertIterator(
RepeatedPtrField<T>* const mutable_field)
@@ -1537,8 +1518,7 @@
// A back inserter for RepeatedPtrFields that inserts by transfering ownership
// of a pointer.
-template<typename T> class AllocatedRepeatedPtrFieldBackInsertIterator
- : public std::iterator<std::output_iterator_tag, T> {
+template<typename T> class AllocatedRepeatedPtrFieldBackInsertIterator {
public:
explicit AllocatedRepeatedPtrFieldBackInsertIterator(
RepeatedPtrField<T>* const mutable_field)
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment