31template <
typename View,
typename Value>
34 using view_type = View;
35 using value_type = Value;
40 static_assert(std::is_constructible<View, Value>::value,
41 "View type must be constructible from a Value");
46 static_assert(std::is_default_constructible<View>::value,
47 "View type must be default constructible");
81 : _value(other._value), _view(_value ? *_value : other._view) {}
87 _value = other._value;
88 _view = _value ? *_value : other._view;
98 : _value{std::move(other._value)}, _view(_value ? *_value : std::move(other._view)) {
100 other._value = stdx::nullopt;
108 _value = std::move(other._value);
109 _view = _value ? *_value : std::move(other._view);
110 other._view = View();
111 other._value = stdx::nullopt;
121 return static_cast<bool>(_value);
129 operator View()
const {
153template <
typename View,
typename Value>
159template <
typename View,
typename Value>
161 return !(lhs == rhs);
173template <
typename View,
typename Value>
175 return lhs.
view() == rhs;
179template <
typename View,
typename Value>
185template <
typename View,
typename Value>
187 return !(lhs == rhs);
191template <
typename View,
typename Value>
193 return !(rhs == lhs);
197template <
typename View,
typename Value>
199 return lhs.
view() == View(rhs);
203template <
typename View,
typename Value>
209template <
typename View,
typename Value>
211 return !(lhs == rhs);
215template <
typename View,
typename Value>
217 return !(rhs == lhs);
228using ::bsoncxx::v_noabi::operator==;
229using ::bsoncxx::v_noabi::operator!=;
240#if defined(BSONCXX_PRIVATE_DOXYGEN_PREPROCESSOR)
245template <
typename View,
typename Value>
250template <
typename View,
typename Value>
255template <
typename View,
typename Value>
259template <
typename View,
typename Value>
263template <
typename View,
typename Value>
267template <
typename View,
typename Value>
271template <
typename View,
typename Value>
275template <
typename View,
typename Value>
279template <
typename View,
typename Value>
The bsoncxx macro guard postlude header.
The bsoncxx macro guard prelude header.
A polyfill for std::optional<T>.
Definition optional.hpp:826
Class representing a view-or-value variant type.
Definition view_or_value.hpp:32
bool operator!=(const Value &lhs, const view_or_value< View, Value > &rhs)
Mixed (in)equality operators for view_or_value against View and Value types.
Definition view_or_value.hpp:216
bool operator!=(View lhs, const view_or_value< View, Value > &rhs)
Mixed (in)equality operators for view_or_value against View and Value types.
Definition view_or_value.hpp:192
view_or_value(View view)
Construct a view_or_value from a View. When constructed with a View, this object is non-owning....
Definition view_or_value.hpp:67
view_or_value()=default
Default-constructs a view_or_value. This is equivalent to constructing a view_or_value with a default...
view_or_value(const view_or_value &other)
Construct a view_or_value from a copied view_or_value.
Definition view_or_value.hpp:80
bool operator!=(const view_or_value< View, Value > &lhs, const view_or_value< View, Value > &rhs)
Compare view_or_value objects for (in)equality.
Definition view_or_value.hpp:160
bool is_owning() const noexcept
Return whether or not this view_or_value owns an underlying Value.
Definition view_or_value.hpp:120
view_or_value(Value &&value)
Constructs a view_or_value from a Value type. This object owns the passed-in Value.
Definition view_or_value.hpp:75
view_or_value & operator=(view_or_value &&other) noexcept
Assign to this view_or_value from a moved-in view_or_value.
Definition view_or_value.hpp:107
bool operator!=(const view_or_value< View, Value > &lhs, const Value &rhs)
Mixed (in)equality operators for view_or_value against View and Value types.
Definition view_or_value.hpp:210
bool operator==(const view_or_value< View, Value > &lhs, View rhs)
Mixed (in)equality operators for view_or_value against View and Value types.
Definition view_or_value.hpp:174
bool operator!=(const view_or_value< View, Value > &lhs, View rhs)
Mixed (in)equality operators for view_or_value against View and Value types.
Definition view_or_value.hpp:186
bool operator==(const view_or_value< View, Value > &lhs, const Value &rhs)
Mixed (in)equality operators for view_or_value against View and Value types.
Definition view_or_value.hpp:198
bool operator==(View lhs, const view_or_value< View, Value > &rhs)
Mixed (in)equality operators for view_or_value against View and Value types.
Definition view_or_value.hpp:180
view_or_value(view_or_value &&other) noexcept
Construct a view_or_value from a moved-in view_or_value.
Definition view_or_value.hpp:97
const View & view() const
Get a View for the type.
Definition view_or_value.hpp:138
~view_or_value()=default
Class View must be constructible from an instance of class Value.
bool operator==(const Value &lhs, const view_or_value< View, Value > &rhs)
Mixed (in)equality operators for view_or_value against View and Value types.
Definition view_or_value.hpp:204
view_or_value & operator=(const view_or_value &other)
Assign to this view_or_value from a copied view_or_value.
Definition view_or_value.hpp:86
bool operator==(const view_or_value< View, Value > &lhs, const view_or_value< View, Value > &rhs)
Compare view_or_value objects for (in)equality.
Definition view_or_value.hpp:154
The top-level namespace within which all bsoncxx library entities are declared.
bool operator==(const v_noabi::view_or_value< View, Value > &lhs, const v_noabi::view_or_value< View, Value > &rhs)
bsoncxx::v_noabi::operator==(const v_noabi::view_or_value<View, Value>& lhs, const v_noabi::view_or_v...
bool operator!=(const v_noabi::view_or_value< View, Value > &lhs, const v_noabi::view_or_value< View, Value > &rhs)
bsoncxx::v_noabi::operator!=(const v_noabi::view_or_value<View, Value>& lhs, const v_noabi::view_or_v...
The top-level namespace reserved for the C++ standard library.
Provides std::optional-related polyfills for library API usage.
Declares bsoncxx::v_noabi::view_or_value.