3 #include <initializer_list>
10 template<
typename BasicJsonType>
14 using value_type = BasicJsonType;
17 : owned_value(std::move(value)), value_ref(&owned_value), is_rvalue(
true)
21 : value_ref(const_cast<value_type*>(&value)), is_rvalue(
false)
24 json_ref(std::initializer_list<json_ref> init)
25 : owned_value(init), value_ref(&owned_value), is_rvalue(
true)
28 template<
class... Args>
30 : owned_value(std::forward<Args>(args)...), value_ref(&owned_value), is_rvalue(
true)
38 value_type moved_or_copied()
const
42 return std::move(*value_ref);
47 value_type
const& operator*()
const
49 return *static_cast<value_type const*>(value_ref);
52 value_type
const* operator->()
const
54 return static_cast<value_type const*>(value_ref);
58 mutable value_type owned_value =
nullptr;
59 value_type* value_ref =
nullptr;