diff --git a/alib2data/src/std/variant.hpp b/alib2data/src/std/variant.hpp index 182f7260b6dd17a9029391ed8b5272ddbb8ab17b..d780330d73d2bc85c45e3cb6bb911eb78070b9d7 100644 --- a/alib2data/src/std/variant.hpp +++ b/alib2data/src/std/variant.hpp @@ -147,29 +147,29 @@ public: variant_base(F&& value) { this->type_id = typeid(F).hash_code(); new (&this->data) F(std::move(value)); } }; -template<typename F, typename... Ts> -class variant : public variant_base<static_max<sizeof(F), sizeof(Ts)...>, static_max<alignof(F), alignof(Ts)...>, F, Ts...> { - using helper_t = variant_helper<F, Ts...>; +template<typename ... Ts> +class variant : public variant_base<static_max<sizeof(Ts)...>, static_max<alignof(Ts)...>, Ts...> { + using helper_t = variant_helper<Ts...>; public: - using variant_base<static_max<sizeof(F), sizeof(Ts)...>, static_max<alignof(F), alignof(Ts)...>, F, Ts...>::variant_base; + using variant_base<static_max<sizeof(Ts)...>, static_max<alignof(Ts)...>, Ts...>::variant_base; //copy consructor - variant(const variant<F, Ts...>& old) : variant_base<static_max<sizeof(F), sizeof(Ts)...>, static_max<alignof(F), alignof(Ts)...>, F, Ts...>() + variant(const variant<Ts...>& old) : variant_base<static_max<sizeof(Ts)...>, static_max<alignof(Ts)...>, Ts...>() { this->type_id = old.type_id; helper_t::copy(old.type_id, &old.data, &this->data); } //move constructor - variant(variant<F, Ts...>&& old) : variant_base<static_max<sizeof(F), sizeof(Ts)...>, static_max<alignof(F), alignof(Ts)...>, F, Ts...>() + variant(variant<Ts...>&& old) : variant_base<static_max<sizeof(Ts)...>, static_max<alignof(Ts)...>, Ts...>() { this->type_id = old.type_id; helper_t::move(old.type_id, &old.data, &this->data); } //assignment operator - variant<F, Ts...>& operator= (variant<F, Ts...> old) + variant<Ts...>& operator= (variant<Ts...> old) { std::swap(this->type_id, old.type_id); std::swap(this->data, old.data); @@ -178,37 +178,37 @@ public: } - bool operator== (const variant<F, Ts...>& other) const + bool operator== (const variant<Ts...>& other) const { return helper_t::compareEq(this->type_id, &this->data, other.type_id, &other.data); } - bool operator!= (const variant<F, Ts...>& other) const + bool operator!= (const variant<Ts...>& other) const { return !(*this == other); } - bool operator< (const variant<F, Ts...>& other) const + bool operator< (const variant<Ts...>& other) const { return helper_t::compareLess(this->type_id, &this->data, other.type_id, &other.data); } - bool operator> (const variant<F, Ts...>& other) const + bool operator> (const variant<Ts...>& other) const { return other < *this; } - bool operator<= (const variant<F, Ts...>& other) const + bool operator<= (const variant<Ts...>& other) const { return !(*this > other); } - bool operator>= (const variant<F, Ts...>& other) const + bool operator>= (const variant<Ts...>& other) const { return !(*this < other); } - int compare(const variant<F, Ts...>& other) const + int compare(const variant<Ts...>& other) const { return helper_t::compareHelper(this->type_id, &this->data, other.type_id, &other.data); } @@ -221,7 +221,7 @@ public: template<typename T> void set(T&& value) { - if(std::is_base_of_any<T, F, Ts...>::value) { + if(std::is_base_of_any<T, Ts...>::value) { helper_t::destroy(this->type_id, &this->data); new (&this->data) T(value); this->type_id = typeid(T).hash_code(); @@ -232,7 +232,7 @@ public: template<typename T> void set(const T& value) { - if(std::is_base_of_any<T, F, Ts...>::value) { + if(std::is_base_of_any<T, Ts...>::value) { helper_t::destroy(this->type_id, &this->data); new (&this->data) T(std::move(value)); this->type_id = typeid(T).hash_code(); @@ -264,7 +264,7 @@ public: helper_t::destroy(this->type_id, &this->data); } - friend std::ostream& operator <<(std::ostream& out, const variant<F, Ts...>& obj) { + friend std::ostream& operator <<(std::ostream& out, const variant<Ts...>& obj) { helper_t::print(out, obj.type_id, &obj.data); return out; }