From 57d822b6e20b1d7c96e535a37511de56df3d3679 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9o=20DELRIEU?= <delrieutheo@gmail.com>
Date: Mon, 14 Aug 2017 19:28:01 +0200
Subject: [PATCH] add missing includes, put back include comments

---
 src/detail/conversions/from_json.hpp          | 18 +++++++------
 src/detail/conversions/to_json.hpp            | 10 +++++---
 src/detail/iterators/iter_impl.hpp            |  9 +++++--
 src/detail/iterators/iteration_proxy.hpp      |  6 +++--
 .../iterators/json_reverse_iterator.hpp       |  6 ++---
 src/detail/iterators/primitive_iterator.hpp   |  7 +++---
 src/detail/macro_scope.hpp                    |  2 ++
 src/detail/meta.hpp                           |  9 ++++---
 src/detail/parsing/binary_reader.hpp          | 22 ++++++++++------
 src/detail/parsing/binary_writer.hpp          | 10 ++++----
 src/detail/parsing/input_adapters.hpp         | 19 +++++++++-----
 src/detail/parsing/lexer.hpp                  | 12 ++++++---
 src/detail/parsing/output_adapters.hpp        | 14 ++++++-----
 src/detail/parsing/parser.hpp                 | 11 +++++---
 src/detail/serializer.hpp                     | 25 +++++++++++--------
 src/detail/value_t.hpp                        |  5 ++--
 src/json.hpp                                  | 21 +++++-----------
 src/json_fwd.hpp                              |  4 +--
 18 files changed, 123 insertions(+), 87 deletions(-)

diff --git a/src/detail/conversions/from_json.hpp b/src/detail/conversions/from_json.hpp
index 471c1320..55925464 100644
--- a/src/detail/conversions/from_json.hpp
+++ b/src/detail/conversions/from_json.hpp
@@ -1,10 +1,16 @@
 #ifndef NLOHMANN_JSON_DETAIL_CONVERSIONS_FROM_JSON_HPP
 #define NLOHMANN_JSON_DETAIL_CONVERSIONS_FROM_JSON_HPP
 
-#include <array>
-#include <tuple>
-#include <utility>
-#include <valarray>
+#include <algorithm> // transform
+#include <array> // array
+#include <ciso646> // and, not
+#include <forward_list> // forward_list
+#include <iterator> // inserter, front_inserter, end
+#include <string> // string
+#include <tuple> // tuple, make_tuple
+#include <type_traits> // is_arithmetic, is_same, is_enum, underlying_type, is_convertible
+#include <utility> // pair, declval
+#include <valarray> // valarray
 
 #include "detail/exceptions.hpp"
 #include "detail/macro_scope.hpp"
@@ -15,10 +21,6 @@ namespace nlohmann
 {
 namespace detail
 {
-///////////////
-// from_json //
-///////////////
-
 // overloads for basic_json template parameters
 template<typename BasicJsonType, typename ArithmeticType,
          enable_if_t<std::is_arithmetic<ArithmeticType>::value and
diff --git a/src/detail/conversions/to_json.hpp b/src/detail/conversions/to_json.hpp
index 0c6d4749..0153b13d 100644
--- a/src/detail/conversions/to_json.hpp
+++ b/src/detail/conversions/to_json.hpp
@@ -1,9 +1,13 @@
 #ifndef NLOHMANN_JSON_DETAIL_CONVERSIONS_TO_JSON_HPP
 #define NLOHMANN_JSON_DETAIL_CONVERSIONS_TO_JSON_HPP
 
-#include <type_traits>
-#include <utility>
-#include <valarray>
+#include <ciso646> // or, and, not
+#include <iterator> // begin, end
+#include <tuple> // tuple, get
+#include <type_traits> // is_same, is_constructible, is_floating_point, is_enum, underlying_type
+#include <utility> // move, forward, declval, pair
+#include <valarray> // valarray
+#include <vector> // vector
 
 #include "detail/meta.hpp"
 #include "detail/value_t.hpp"
diff --git a/src/detail/iterators/iter_impl.hpp b/src/detail/iterators/iter_impl.hpp
index 79b11b33..e11412c6 100644
--- a/src/detail/iterators/iter_impl.hpp
+++ b/src/detail/iterators/iter_impl.hpp
@@ -1,11 +1,16 @@
 #ifndef NLOHMANN_JSON_DETAIL_ITERATORS_ITER_IMPL_HPP
 #define NLOHMANN_JSON_DETAIL_ITERATORS_ITER_IMPL_HPP
 
-#include <iterator>
-#include <type_traits>
+#include <ciso646> // not
+#include <iterator> // iterator, random_access_iterator_tag, bidirectional_iterator_tag, advance, next
+#include <type_traits> // conditional, is_const, remove_const
 
 #include "detail/exceptions.hpp"
+#include "detail/iterators/internal_iterator.hpp"
+#include "detail/iterators/primitive_iterator.hpp"
 #include "detail/macro_scope.hpp"
+#include "detail/meta.hpp"
+#include "detail/value_t.hpp"
 
 namespace nlohmann
 {
diff --git a/src/detail/iterators/iteration_proxy.hpp b/src/detail/iterators/iteration_proxy.hpp
index 6a13f39d..e4ce84e4 100644
--- a/src/detail/iterators/iteration_proxy.hpp
+++ b/src/detail/iterators/iteration_proxy.hpp
@@ -1,8 +1,10 @@
 #ifndef NLOHMANN_JSON_DETAIL_ITERATORS_ITERATION_PROXY_HPP
 #define NLOHMANN_JSON_DETAIL_ITERATORS_ITERATION_PROXY_HPP
 
-#include <cstddef>
-#include <string>
+#include <cstddef> // size_t
+#include <string> // string, to_string
+
+#include "detail/value_t.hpp"
 
 namespace nlohmann
 {
diff --git a/src/detail/iterators/json_reverse_iterator.hpp b/src/detail/iterators/json_reverse_iterator.hpp
index 52862d38..b0f4effe 100644
--- a/src/detail/iterators/json_reverse_iterator.hpp
+++ b/src/detail/iterators/json_reverse_iterator.hpp
@@ -1,9 +1,9 @@
 #ifndef NLOHMANN_JSON_DETAIL_ITERATORS_JSON_REVERSE_ITERATOR_HPP
 #define NLOHMANN_JSON_DETAIL_ITERATORS_JSON_REVERSE_ITERATOR_HPP
 
-#include <cstddef>
-#include <iterator>
-#include <utility>
+#include <cstddef> // ptrdiff_t
+#include <iterator> // reverse_iterator
+#include <utility> // declval
 
 namespace nlohmann
 {
diff --git a/src/detail/iterators/primitive_iterator.hpp b/src/detail/iterators/primitive_iterator.hpp
index 8ebafe0e..c5cd4031 100644
--- a/src/detail/iterators/primitive_iterator.hpp
+++ b/src/detail/iterators/primitive_iterator.hpp
@@ -1,9 +1,10 @@
 #ifndef NLOHMANN_JSON_DETAIL_ITERATORS_PRIMITIVE_ITERATOR_HPP
 #define NLOHMANN_JSON_DETAIL_ITERATORS_PRIMITIVE_ITERATOR_HPP
 
-#include <cstddef>
-#include <iosfwd>
-#include <limits>
+#include <ciso646> // not
+#include <cstddef> // ptrdiff_t
+#include <limits>  // numeric_limits
+#include <ostream> // ostream
 
 namespace nlohmann
 {
diff --git a/src/detail/macro_scope.hpp b/src/detail/macro_scope.hpp
index b2ac7742..f20cc667 100644
--- a/src/detail/macro_scope.hpp
+++ b/src/detail/macro_scope.hpp
@@ -1,6 +1,8 @@
 #ifndef NLOHMANN_JSON_MACRO_SCOPE_HPP
 #define NLOHMANN_JSON_MACRO_SCOPE_HPP
 
+#include <ciso646> // not
+
 // This file contains all internal macro definitions
 // You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them
 
diff --git a/src/detail/meta.hpp b/src/detail/meta.hpp
index a9b20443..35705183 100644
--- a/src/detail/meta.hpp
+++ b/src/detail/meta.hpp
@@ -1,10 +1,11 @@
 #ifndef NLOHMANN_JSON_DETAIL_META_HPP
 #define NLOHMANN_JSON_DETAIL_META_HPP
 
-#include <cstdint>
-#include <limits>
-#include <type_traits> // add_pointer, conditional, decay, enable_if, false_type, integral_constant, is_arithmetic, is_base_of, is_const, is_constructible, is_convertible, is_default_constructible, is_enum, is_floating_point, is_integral, is_nothrow_move_assignable, is_nothrow_move_constructible, is_pointer, is_reference, is_same, is_scalar, is_signed, remove_const, remove_cv, remove_pointer, remove_reference, true_type, underlying_type
-#include <utility>
+#include <ciso646> // not
+#include <cstddef> // size_t
+#include <limits> // numeric_limits
+#include <type_traits> // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type
+#include <utility> // declval
 
 #include "json_fwd.hpp"
 #include "detail/macro_scope.hpp"
diff --git a/src/detail/parsing/binary_reader.hpp b/src/detail/parsing/binary_reader.hpp
index 0d8ce4ad..a1195393 100644
--- a/src/detail/parsing/binary_reader.hpp
+++ b/src/detail/parsing/binary_reader.hpp
@@ -1,14 +1,20 @@
 #ifndef NLOHMANN_JSON_DETAIL_PARSING_BINARY_READER_HPP
 #define NLOHMANN_JSON_DETAIL_PARSING_BINARY_READER_HPP
 
-#include <algorithm>
-#include <array>
-#include <cstdint>
-#include <cstring>
-#include <iomanip>
-#include <sstream>
-#include <string>
-#include <utility>
+#include <algorithm> // generate_n
+#include <array> // array
+#include <cassert> // assert
+#include <cmath> // ldexp
+#include <cstddef> // size_t
+#include <cstdint> // uint8_t, uint16_t, uint32_t, uint64_t
+#include <cstring> // memcpy
+#include <iomanip> // setw, setfill
+#include <ios> // hex
+#include <iterator> // back_inserter
+#include <limits> // numeric_limits
+#include <sstream> // stringstream
+#include <string> // char_traits, string
+#include <utility> // make_pair, move
 
 #include "detail/exceptions.hpp"
 #include "detail/macro_scope.hpp"
diff --git a/src/detail/parsing/binary_writer.hpp b/src/detail/parsing/binary_writer.hpp
index 25badd89..59583b9c 100644
--- a/src/detail/parsing/binary_writer.hpp
+++ b/src/detail/parsing/binary_writer.hpp
@@ -1,11 +1,11 @@
 #ifndef NLOHMANN_JSON_DETAIL_PARSING_BINARY_WRITER_HPP
 #define NLOHMANN_JSON_DETAIL_PARSING_BINARY_WRITER_HPP
 
-#include <algorithm>
-#include <array>
-#include <cstdint>
-#include <cstring>
-#include <limits>
+#include <algorithm> // reverse
+#include <array> // array
+#include <cstdint> // uint8_t, uint16_t, uint32_t, uint64_t
+#include <cstring> // memcpy
+#include <limits> // numeric_limits
 
 #include "detail/parsing/binary_reader.hpp"
 #include "detail/parsing/output_adapters.hpp"
diff --git a/src/detail/parsing/input_adapters.hpp b/src/detail/parsing/input_adapters.hpp
index 17cf5892..7d4f2dee 100644
--- a/src/detail/parsing/input_adapters.hpp
+++ b/src/detail/parsing/input_adapters.hpp
@@ -1,12 +1,19 @@
 #ifndef NLOHMANN_JSON_DETAIL_PARSING_INPUT_ADAPTERS_HPP
 #define NLOHMANN_JSON_DETAIL_PARSING_INPUT_ADAPTERS_HPP
 
-#include <algorithm>
-#include <array>
-#include <cstddef>
-#include <iosfwd>
-#include <memory>
-#include <string>
+#include <algorithm> // min
+#include <array> // array
+#include <cassert> // assert
+#include <cstddef> // size_t
+#include <cstring> // strlen
+#include <ios> // streamsize, streamoff, streampos
+#include <istream> // istream
+#include <iterator> // begin, end, iterator_traits, random_access_iterator_tag, distance, next
+#include <memory> // shared_ptr, make_shared, addressof
+#include <numeric> // accumulate
+#include <string> // string, char_traits
+#include <type_traits> // enable_if, is_base_of, is_pointer, is_integral, remove_pointer
+#include <utility> // pair, declval
 
 #include "detail/macro_scope.hpp"
 
diff --git a/src/detail/parsing/lexer.hpp b/src/detail/parsing/lexer.hpp
index b1232db0..f50b0521 100644
--- a/src/detail/parsing/lexer.hpp
+++ b/src/detail/parsing/lexer.hpp
@@ -1,9 +1,15 @@
 #ifndef NLOHMANN_JSON_DETAIL_PARSING_LEXER_HPP
 #define NLOHMANN_JSON_DETAIL_PARSING_LEXER_HPP
 
-#include <clocale>
-#include <cstddef>
-#include <vector>
+#include <clocale> // localeconv
+#include <cstddef> // size_t
+#include <cstdlib> // strtof, strtod, strtold, strtoll, strtoull
+#include <initializer_list> // initializer_list
+#include <ios> // hex, uppercase
+#include <iomanip> // setw, setfill
+#include <sstream> // stringstream
+#include <string> // char_traits, string
+#include <vector> // vector
 
 #include "detail/macro_scope.hpp"
 #include "detail/parsing/input_adapters.hpp"
diff --git a/src/detail/parsing/output_adapters.hpp b/src/detail/parsing/output_adapters.hpp
index 5cbc11b9..71099038 100644
--- a/src/detail/parsing/output_adapters.hpp
+++ b/src/detail/parsing/output_adapters.hpp
@@ -1,12 +1,14 @@
 #ifndef NLOHMANN_JSON_DETAIL_PARSING_OUTPUT_ADAPTERS_HPP
 #define NLOHMANN_JSON_DETAIL_PARSING_OUTPUT_ADAPTERS_HPP
 
-#include <algorithm>
-#include <cstddef>
-#include <iosfwd>
-#include <iterator>
-#include <memory>
-#include <vector>
+#include <algorithm> // copy
+#include <cstddef> // size_t
+#include <ios> // streamsize
+#include <iterator> // back_inserter
+#include <memory> // shared_ptr, make_shared
+#include <ostream> // basic_ostream
+#include <string> // basic_string
+#include <vector> // vector
 
 namespace nlohmann
 {
diff --git a/src/detail/parsing/parser.hpp b/src/detail/parsing/parser.hpp
index c82c2f6d..52a9c4fe 100644
--- a/src/detail/parsing/parser.hpp
+++ b/src/detail/parsing/parser.hpp
@@ -1,15 +1,18 @@
 #ifndef NLOHMANN_JSON_DETAIL_PARSING_PARSER_HPP
 #define NLOHMANN_JSON_DETAIL_PARSING_PARSER_HPP
 
-#include <cmath>
-#include <functional>
-#include <string>
-#include <utility>
+#include <cassert> // assert
+#include <cmath> // isfinite
+#include <cstdint> // uint8_t
+#include <functional> // function
+#include <string> // string
+#include <utility> // move
 
 #include "detail/exceptions.hpp"
 #include "detail/macro_scope.hpp"
 #include "detail/parsing/input_adapters.hpp"
 #include "detail/parsing/lexer.hpp"
+#include "detail/value_t.hpp"
 
 namespace nlohmann
 {
diff --git a/src/detail/serializer.hpp b/src/detail/serializer.hpp
index 955a3eac..0d3303d9 100644
--- a/src/detail/serializer.hpp
+++ b/src/detail/serializer.hpp
@@ -1,21 +1,24 @@
 #ifndef NLOHMANN_JSON_DETAIL_SERIALIZER_HPP
 #define NLOHMANN_JSON_DETAIL_SERIALIZER_HPP
 
-#include <algorithm>
-#include <array>
-#include <clocale>
-#include <cmath>
-#include <cstddef>
-#include <cstdint>
-#include <cstdio>
-#include <iterator>
-#include <limits>
-#include <string>
-#include <type_traits>
+#include <algorithm> // reverse, remove, fill, find, none_of
+#include <array> // array
+#include <cassert> // assert
+#include <ciso646> // and, or
+#include <clocale> // localeconv, lconv
+#include <cmath> // labs, isfinite, isnan, signbit
+#include <cstddef> // size_t, ptrdiff_t
+#include <cstdint> // uint8_t
+#include <cstdio> // snprintf
+#include <iterator> // next
+#include <limits> // numeric_limits
+#include <string> // string
+#include <type_traits> // is_same
 
 #include "detail/macro_scope.hpp"
 #include "detail/meta.hpp"
 #include "detail/parsing/output_adapters.hpp"
+#include "detail/value_t.hpp"
 
 namespace nlohmann
 {
diff --git a/src/detail/value_t.hpp b/src/detail/value_t.hpp
index dbfffd47..b96f294b 100644
--- a/src/detail/value_t.hpp
+++ b/src/detail/value_t.hpp
@@ -1,6 +1,7 @@
 #ifndef NLOHMANN_JSON_DETAIL_VALUE_T_HPP
 #define NLOHMANN_JSON_DETAIL_VALUE_T_HPP
 
+#include <array> // array
 #include <ciso646> // and
 #include <cstddef> // size_t
 #include <cstdint> // uint8_t
@@ -37,7 +38,7 @@ value with the default value for a given type
 
 @since version 1.0.0
 */
-enum class value_t : uint8_t
+enum class value_t : std::uint8_t
 {
     null,             ///< null value
     object,           ///< object (unordered set of name/value pairs)
@@ -62,7 +63,7 @@ Returns an ordering that is similar to Python:
 */
 inline bool operator<(const value_t lhs, const value_t rhs) noexcept
 {
-    static constexpr std::array<uint8_t, 8> order = {{
+    static constexpr std::array<std::uint8_t, 8> order = {{
             0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */,
             1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */
         }
diff --git a/src/json.hpp b/src/json.hpp
index 4eb7ec79..f4c139e4 100644
--- a/src/json.hpp
+++ b/src/json.hpp
@@ -29,26 +29,17 @@ SOFTWARE.
 #ifndef NLOHMANN_JSON_HPP
 #define NLOHMANN_JSON_HPP
 
-#include <algorithm> // all_of, copy, fill, find, for_each, generate_n, none_of, remove, reverse, transform
-#include <array> // array
+#include <algorithm> // all_of, find, for_each
 #include <cassert> // assert
 #include <ciso646> // and, not, or
-#include <clocale> // lconv, localeconv
-#include <cmath> // isfinite, labs, ldexp, signbit
 #include <cstddef> // nullptr_t, ptrdiff_t, size_t
-#include <cstdlib> // abort, strtod, strtof, strtold, strtoul, strtoll, strtoull
-#include <cstring> // memcpy, strlen
-#include <forward_list> // forward_list
-#include <functional> // function, hash, less
+#include <functional> // hash, less
 #include <initializer_list> // initializer_list
-#include <iomanip> // hex
-#include <iosfwd>   // istream, ostream
-#include <iterator> // advance, begin, back_inserter, bidirectional_iterator_tag, distance, end, inserter, iterator, iterator_traits, next, random_access_iterator_tag, reverse_iterator
-#include <limits> // numeric_limits
-#include <locale> // locale
+#include <iosfwd> // istream, ostream
+#include <iterator> // iterator_traits, random_access_iterator_tag
 #include <numeric> // accumulate
-#include <sstream> // stringstream
-#include <utility> // declval, forward, make_pair, move, pair, swap
+#include <string> // string, stoi, to_string
+#include <utility> // declval, forward, move, pair, swap
 
 #include "json_fwd.hpp"
 #include "detail/macro_scope.hpp"
diff --git a/src/json_fwd.hpp b/src/json_fwd.hpp
index a068da18..f2a6b0f2 100644
--- a/src/json_fwd.hpp
+++ b/src/json_fwd.hpp
@@ -3,8 +3,8 @@
 
 #include <cstdint> // int64_t, uint64_t
 #include <map> // map
-#include <memory> // addressof, allocator, allocator_traits, unique_ptr
-#include <string> // getline, stoi, string, to_string
+#include <memory> // allocator
+#include <string> // string
 #include <vector> // vector
 
 /*!