diff --git a/README.md b/README.md
index 077a60bc..cf870973 100644
--- a/README.md
+++ b/README.md
@@ -416,7 +416,7 @@ Please note that setting the exception bit for `failbit` is inappropriate for th
 
 #### Read from iterator range
 
-You can also parse JSON from an iterator range; that is, from any container accessible by iterators whose content is stored as contiguous byte sequence, for instance a `std::vector<std::uint8_t>`:
+You can also parse JSON from an iterator range; that is, from any container accessible by iterators whose `value_type` is an integral type of 1, 2 or 4 bytes, for instance a `std::vector<std::uint8_t>`, or a `std::list<std::uint16_t>`:
 
 ```cpp
 std::vector<std::uint8_t> v = {'t', 'r', 'u', 'e'};
@@ -430,6 +430,55 @@ std::vector<std::uint8_t> v = {'t', 'r', 'u', 'e'};
 json j = json::parse(v);
 ```
 
+#### Custom data source
+
+Since the parse function accepts arbitrary iterator ranges, you can provide your own data sources by implementing the `LegacyInputIterator` concept.
+
+```cpp
+struct MyContainer;
+
+struct MyContainer {
+  void advance();
+  const char& get_current();
+};
+
+struct MyIterator {
+    using difference_type = std::ptrdiff_t;
+    using value_type = char;
+    using pointer = const char*;
+    using reference = const char&;
+    using iterator_category = std::input_iterator_tag;
+
+    MyIterator& operator++() {
+        MyContainer.advance();
+    }
+
+    bool operator!=(const MyIterator& rhs) const {
+        return rhs.pos != pos || rhs.target != target;
+    }
+
+    reference operator*() const {
+        return target.get_current();
+    }
+
+    MyContainer* target = nullptr;
+    std::size_t pos = 0;
+};
+
+MyIterator begin(MyContainer& tgt) {
+    return MyIterator{&tgt, 0}
+}
+
+MyIterator end(const MyContainer&) {
+    return MyIterator{nullptr, 0} 
+}
+
+void foo() {
+    MyContainer c;
+    json j = json::parse(c);
+}
+```
+
 #### SAX interface
 
 The library uses a SAX-like interface with the following functions:
diff --git a/test/src/unit-user_defined_input.cpp b/test/src/unit-user_defined_input.cpp
index d2685ec6..06be4e13 100644
--- a/test/src/unit-user_defined_input.cpp
+++ b/test/src/unit-user_defined_input.cpp
@@ -98,6 +98,7 @@ TEST_CASE("Custom iterator")
         {
             return *ptr;
         }
+        
         bool operator!=(const MyIterator& rhs) const
         {
             return ptr != rhs.ptr;