6 #ifndef JBSON_VISIT_HPP
7 #define JBSON_VISIT_HPP
9 #include "../element_fwd.hpp"
11 JBSON_PUSH_DISABLE_DEPRECATED_WARNING
21 template <
template <
element_type EType,
typename... VArgs>
class Visitor, typename... Args>
22 std::enable_if_t<std::is_void<
23 decltype(std::declval<Visitor<element_type::int64_element, Args...>>()(std::declval<Args&&>()...))>::value>
24 visit(element_type type, Args&&... args) {
28 (std::forward<Args>(args)...);
32 (std::forward<Args>(args)...);
36 (std::forward<Args>(args)...);
40 (std::forward<Args>(args)...);
48 (std::forward<Args>(args)...);
52 (std::forward<Args>(args)...);
56 (std::forward<Args>(args)...);
60 (std::forward<Args>(args)...);
64 (std::forward<Args>(args)...);
68 (std::forward<Args>(args)...);
72 (std::forward<Args>(args)...);
76 (std::forward<Args>(args)...);
80 (std::forward<Args>(args)...);
84 (std::forward<Args>(args)...);
88 (std::forward<Args>(args)...);
92 (std::forward<Args>(args)...);
96 (std::forward<Args>(args)...);
100 (std::forward<Args>(args)...);
104 (std::forward<Args>(args)...);
116 template <
template <
element_type EType,
typename... VArgs>
class Visitor, typename... Args>
117 std::enable_if_t<!std::is_void<decltype(
118 std::declval<Visitor<element_type::int64_element, Args...>>()(std::declval<Args&&>()...))>::value,
119 decltype(std::declval<Visitor<element_type::int64_element, Args...>>()(std::declval<Args&&>()...))>
120 visit(element_type type, Args&&... args) {
124 (std::forward<Args>(args)...);
127 (std::forward<Args>(args)...);
130 (std::forward<Args>(args)...);
133 (std::forward<Args>(args)...);
139 (std::forward<Args>(args)...);
142 (std::forward<Args>(args)...);
145 (std::forward<Args>(args)...);
148 (std::forward<Args>(args)...);
151 (std::forward<Args>(args)...);
154 (std::forward<Args>(args)...);
157 (std::forward<Args>(args)...);
160 (std::forward<Args>(args)...);
163 (std::forward<Args>(args)...);
166 (std::forward<Args>(args)...);
169 (std::forward<Args>(args)...);
172 (std::forward<Args>(args)...);
175 (std::forward<Args>(args)...);
178 (std::forward<Args>(args)...);
181 (std::forward<Args>(args)...);
184 << detail::actual_type(
typeid(Visitor<element_type::min_key, Args...>)));
192 #endif // JBSON_VISIT_HPP
element_type
The element_type enum represents a BSON data type.
std::string or boost::string_ref (string_type)
std::enable_if_t< std::is_void< decltype(std::declval< Visitor< element_type::int64_element, Args...>>()(std::declval< Args && >)...))>::value > visit(element_type type, Args &&...args)
void visit.
basic_document> (document_type)
Exception type thrown when an element has a type value not represented by element_type.