diff options
Diffstat (limited to 'include/lib/modernjson/detail/json_ref.hpp')
-rw-r--r-- | include/lib/modernjson/detail/json_ref.hpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/include/lib/modernjson/detail/json_ref.hpp b/include/lib/modernjson/detail/json_ref.hpp index 8285be2..c44aa66 100644 --- a/include/lib/modernjson/detail/json_ref.hpp +++ b/include/lib/modernjson/detail/json_ref.hpp @@ -3,6 +3,8 @@ #include <initializer_list> #include <utility> +#include <lib/modernjson/detail/meta/type_traits.hpp> + namespace nlohmann { namespace detail @@ -25,15 +27,19 @@ class json_ref : owned_value(init), value_ref(&owned_value), is_rvalue(true) {} - template<class... Args> - json_ref(Args&& ... args) - : owned_value(std::forward<Args>(args)...), value_ref(&owned_value), is_rvalue(true) - {} + template < + class... Args, + enable_if_t<std::is_constructible<value_type, Args...>::value, int> = 0 > + json_ref(Args && ... args) + : owned_value(std::forward<Args>(args)...), value_ref(&owned_value), + is_rvalue(true) {} // class should be movable only json_ref(json_ref&&) = default; json_ref(const json_ref&) = delete; json_ref& operator=(const json_ref&) = delete; + json_ref& operator=(json_ref&&) = delete; + ~json_ref() = default; value_type moved_or_copied() const { @@ -59,5 +65,5 @@ class json_ref value_type* value_ref = nullptr; const bool is_rvalue; }; -} -} +} // namespace detail +} // namespace nlohmann |