Skip to content

Commit 87cda1d

Browse files
Use std::iterator_traits to extract iterator_category (nlohmann#3544)
* Use `std::iterator_traits` to extract `iterator_category` In third-party STL implementations, `array_t::iterator` might be a pointer (e.g., `vector` in [EASTL](https://github.com/electronicarts/EASTL)) rather than a class, in which case directly using `array_t::iterator::iterator_category` is invalid. This commit fixes it with `std::iterator_traits`, which handles pointers correctly. * add the changes to the single-header version
1 parent 1373023 commit 87cda1d

File tree

2 files changed

+2
-2
lines changed

2 files changed

+2
-2
lines changed

include/nlohmann/detail/iterators/iter_impl.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-speci
5353
"iter_impl only accepts (const) basic_json");
5454
// superficial check for the LegacyBidirectionalIterator named requirement
5555
static_assert(std::is_base_of<std::bidirectional_iterator_tag, std::bidirectional_iterator_tag>::value
56-
&& std::is_base_of<std::bidirectional_iterator_tag, typename array_t::iterator::iterator_category>::value,
56+
&& std::is_base_of<std::bidirectional_iterator_tag, typename std::iterator_traits<typename array_t::iterator>::iterator_category>::value,
5757
"basic_json iterator assumes array and object type iterators satisfy the LegacyBidirectionalIterator named requirement.");
5858

5959
public:

single_include/nlohmann/json.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12393,7 +12393,7 @@ class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-speci
1239312393
"iter_impl only accepts (const) basic_json");
1239412394
// superficial check for the LegacyBidirectionalIterator named requirement
1239512395
static_assert(std::is_base_of<std::bidirectional_iterator_tag, std::bidirectional_iterator_tag>::value
12396-
&& std::is_base_of<std::bidirectional_iterator_tag, typename array_t::iterator::iterator_category>::value,
12396+
&& std::is_base_of<std::bidirectional_iterator_tag, typename std::iterator_traits<typename array_t::iterator>::iterator_category>::value,
1239712397
"basic_json iterator assumes array and object type iterators satisfy the LegacyBidirectionalIterator named requirement.");
1239812398

1239912399
public:

0 commit comments

Comments
 (0)