2 // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 // Official repository: https://github.com/boostorg/json
10 #ifndef BOOST_JSON_IMPL_VISIT_HPP
11 #define BOOST_JSON_IMPL_VISIT_HPP
15 template<class Visitor>
19 value& jv) -> decltype(
20 std::declval<Visitor>()(nullptr))
24 default: // unreachable()?
25 case kind::null: return std::forward<Visitor>(v)(nullptr);
26 case kind::bool_: return std::forward<Visitor>(v)(jv.get_bool());
27 case kind::int64: return std::forward<Visitor>(v)(jv.get_int64());
28 case kind::uint64: return std::forward<Visitor>(v)(jv.get_uint64());
29 case kind::double_: return std::forward<Visitor>(v)(jv.get_double());
30 case kind::string: return std::forward<Visitor>(v)(jv.get_string());
31 case kind::array: return std::forward<Visitor>(v)(jv.get_array());
32 case kind::object: return std::forward<Visitor>(v)(jv.get_object());
36 template<class Visitor>
40 value const& jv) -> decltype(
41 std::declval<Visitor>()(nullptr))
45 default: // unreachable()?
46 case kind::null: return std::forward<Visitor>(v)(nullptr);
47 case kind::bool_: return std::forward<Visitor>(v)(jv.get_bool());
48 case kind::int64: return std::forward<Visitor>(v)(jv.get_int64());
49 case kind::uint64: return std::forward<Visitor>(v)(jv.get_uint64());
50 case kind::double_: return std::forward<Visitor>(v)(jv.get_double());
51 case kind::string: return std::forward<Visitor>(v)(jv.get_string());
52 case kind::array: return std::forward<Visitor>(v)(jv.get_array());
53 case kind::object: return std::forward<Visitor>(v)(jv.get_object());