From fd4942b6f56227e9d90ad046ae011bc9db05eae0 Mon Sep 17 00:00:00 2001 From: ljfa-ag Date: Tue, 7 Jul 2015 17:16:25 +0200 Subject: Make value copyable (after all) --- include/crtp_tag.h | 4 ++-- include/value.h | 13 +++++-------- 2 files changed, 7 insertions(+), 10 deletions(-) (limited to 'include') diff --git a/include/crtp_tag.h b/include/crtp_tag.h index 928759d6b8..a871866a2c 100644 --- a/include/crtp_tag.h +++ b/include/crtp_tag.h @@ -55,13 +55,13 @@ namespace detail } //TODO: Add copy constructors for tags that are missing it before this becomes useable - /*template + template std::unique_ptr crtp_tag::clone() const& { return std::unique_ptr( new Sub(static_cast(*this)) ); - }*/ + } template std::unique_ptr crtp_tag::move_clone() && diff --git a/include/value.h b/include/value.h index 64e79efe9c..02937c8f5e 100644 --- a/include/value.h +++ b/include/value.h @@ -39,12 +39,14 @@ public: explicit value(std::unique_ptr&& t); explicit value(tag&& t); - //Movable but not (implicitly) copyable - value(const value&) = delete; + //Moving value(value&&) = default; - value& operator=(const value&) = delete; value& operator=(value&&) = default; + //Copying + explicit value(const value& rhs); + value& operator=(const value& rhs); + /** * @brief Assigns the given value to the tag if the type matches * @throw std::bad_cast if the type of @c t is not the same as the type @@ -128,11 +130,6 @@ public: value& operator[](const std::string& key); value& operator[](const char* key); //need this overload because of conflict with built-in operator[] - /** - * @brief Creates a copy of the value - */ - value copy() const; - std::unique_ptr& get_ptr(); const std::unique_ptr& get_ptr() const; void set_ptr(std::unique_ptr&& t); -- cgit 0.0.5-2-1-g0f52