summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorljfa-ag <ljfa-ag@web.de>2015-07-07 17:16:25 +0200
committerljfa-ag <ljfa-ag@web.de>2015-07-07 17:16:25 +0200
commitfd4942b6f56227e9d90ad046ae011bc9db05eae0 (patch)
treefd319644ae5d7bb52537270034bb0c3035908dc9 /include
parent49bcfa77e1252fb9e4e55d6a5f97a420f6de8fc4 (diff)
downloadProject-Tick-fd4942b6f56227e9d90ad046ae011bc9db05eae0.tar.gz
Project-Tick-fd4942b6f56227e9d90ad046ae011bc9db05eae0.zip
Make value copyable (after all)
Diffstat (limited to 'include')
-rw-r--r--include/crtp_tag.h4
-rw-r--r--include/value.h13
2 files changed, 7 insertions, 10 deletions
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<class Sub>
+ template<class Sub>
std::unique_ptr<tag> crtp_tag<Sub>::clone() const&
{
return std::unique_ptr<tag>(
new Sub(static_cast<const Sub&>(*this))
);
- }*/
+ }
template<class Sub>
std::unique_ptr<tag> crtp_tag<Sub>::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<tag>&& 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<tag>& get_ptr();
const std::unique_ptr<tag>& get_ptr() const;
void set_ptr(std::unique_ptr<tag>&& t);