Make the indirection and dereference operators of iterator const

fixes #233
This commit is contained in:
Robert Marki 2016-04-13 13:49:53 +02:00
parent 170b70f082
commit 2197f5f0a6
3 changed files with 15 additions and 4 deletions

View file

@ -7000,13 +7000,13 @@ class basic_json
} }
/// return a reference to the value pointed to by the iterator /// return a reference to the value pointed to by the iterator
reference operator*() reference operator*() const
{ {
return const_cast<reference>(base_iterator::operator*()); return const_cast<reference>(base_iterator::operator*());
} }
/// dereference the iterator /// dereference the iterator
pointer operator->() pointer operator->() const
{ {
return const_cast<pointer>(base_iterator::operator->()); return const_cast<pointer>(base_iterator::operator->());
} }

View file

@ -7000,13 +7000,13 @@ class basic_json
} }
/// return a reference to the value pointed to by the iterator /// return a reference to the value pointed to by the iterator
reference operator*() reference operator*() const
{ {
return const_cast<reference>(base_iterator::operator*()); return const_cast<reference>(base_iterator::operator*());
} }
/// dereference the iterator /// dereference the iterator
pointer operator->() pointer operator->() const
{ {
return const_cast<pointer>(base_iterator::operator->()); return const_cast<pointer>(base_iterator::operator->());
} }

View file

@ -12407,5 +12407,16 @@ TEST_CASE("regression tests")
CHECK(j3b.dump() == "1E04"); CHECK(j3b.dump() == "1E04");
CHECK(j3c.dump() == "1e04"); CHECK(j3c.dump() == "1e04");
} }
SECTION("issue #233 - Can't use basic_json::iterator as a base iterator for std::move_iterator")
{
json source = {"a", "b", "c"};
json expected = {"a", "b"};
json dest;
std::copy_n(std::make_move_iterator(source.begin()), 2, std::back_inserter(dest));
CHECK(dest == expected);
}
} }