diff --git a/CMakeLists.txt b/CMakeLists.txt index 93b5f95..c048540 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.20) include(cmake/color.cmake) -set(BLT_VERSION 5.4.14) +set(BLT_VERSION 5.4.15) set(BLT_TARGET BLT) diff --git a/include/blt/std/variant.h b/include/blt/std/variant.h index 85cde6a..f4b5d96 100644 --- a/include/blt/std/variant.h +++ b/include/blt/std/variant.h @@ -199,13 +199,6 @@ namespace blt return m_variant.valueless_by_exception(); } - template ...> || std::conjunction_v< - std::is_invocable...>, bool> = true> - constexpr auto visit(T&& visitor) -> decltype(auto) - { - return std::visit(std::forward(visitor), m_variant); - } - template static constexpr auto make_visitor(Visitee&&... visitees) { @@ -269,6 +262,16 @@ namespace blt return std::visit(make_visitor(std::forward(visitees)...), m_variant); } + /** + * Automatic visitor generation + * @param visitees user lambdas + */ + template + constexpr auto visit(Visitee&&... visitees) const -> decltype(auto) + { + return std::visit(make_visitor(std::forward(visitees)...), m_variant); + } + template constexpr auto visit_value(Default&& default_value, Visitee&&... visitees) -> decltype(auto) { @@ -401,7 +404,7 @@ namespace blt friend bool operator<(const variant_t& lhs, const variant_t& rhs) { - return lhs.m_variant < rhs.m_variant; + return lhs.m_variant(const variant_t& lhs, const variant_t& rhs) @@ -420,6 +423,7 @@ namespace blt } private: + value_type m_variant; };