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
reference operator*()
reference operator*() const
{
return const_cast<reference>(base_iterator::operator*());
}
/// dereference the iterator
pointer operator->()
pointer operator->() const
{
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
reference operator*()
reference operator*() const
{
return const_cast<reference>(base_iterator::operator*());
}
/// dereference the iterator
pointer operator->()
pointer operator->() const
{
return const_cast<pointer>(base_iterator::operator->());
}

View file

@ -12407,5 +12407,16 @@ TEST_CASE("regression tests")
CHECK(j3b.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);
}
}