From 6e2f4029c0e850a7420fba2ab953c0b6323e13fb Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 3 Sep 2021 09:36:40 -0400 Subject: cmAlgorithms: Preserve const-ness in cmRemoveDuplicates range signature The pattern `vec.erase(cmRemoveDuplicates(vec), vec.end())` fails to compile with GCC 4.8's libstdc++ if `cmRemoveDuplicates` returns a `const_iterator` because `end()` returns an `iterator`. Overload `cmRemoveDuplicates` to return an iterator type matching the const-ness of its argument. --- Source/cmAlgorithms.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/cmAlgorithms.h b/Source/cmAlgorithms.h index c192e2a..e0ba83d 100644 --- a/Source/cmAlgorithms.h +++ b/Source/cmAlgorithms.h @@ -133,7 +133,13 @@ ForwardIterator cmRemoveDuplicates(ForwardIterator first, ForwardIterator last) } template -typename Range::const_iterator cmRemoveDuplicates(Range& r) +typename Range::iterator cmRemoveDuplicates(Range& r) +{ + return cmRemoveDuplicates(r.begin(), r.end()); +} + +template +typename Range::const_iterator cmRemoveDuplicates(Range const& r) { return cmRemoveDuplicates(r.begin(), r.end()); } -- cgit v0.12