nope
parent
5aacd7df9d
commit
5981a244c2
|
@ -1,6 +1,6 @@
|
||||||
cmake_minimum_required(VERSION 3.20)
|
cmake_minimum_required(VERSION 3.20)
|
||||||
include(cmake/color.cmake)
|
include(cmake/color.cmake)
|
||||||
set(BLT_VERSION 5.4.12)
|
set(BLT_VERSION 5.4.13)
|
||||||
|
|
||||||
set(BLT_TARGET BLT)
|
set(BLT_TARGET BLT)
|
||||||
|
|
||||||
|
|
|
@ -147,15 +147,6 @@ namespace blt
|
||||||
std::forward<Types>(args)...)
|
std::forward<Types>(args)...)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
// template <typename T, std::enable_if_t<!std::is_same_v<std::decay_t<T>, variant_t>, bool> = true>
|
|
||||||
// explicit constexpr variant_t(T&& t): m_variant(std::forward<T>(t))
|
|
||||||
// {}
|
|
||||||
|
|
||||||
// template<typename T>
|
|
||||||
// constexpr variant_t(std::initializer_list<T> il): m_variant(*il.begin())
|
|
||||||
// {
|
|
||||||
// }
|
|
||||||
|
|
||||||
template <typename T, typename... C_Args>
|
template <typename T, typename... C_Args>
|
||||||
explicit constexpr variant_t(std::in_place_type_t<T>, C_Args&&... args): m_variant(std::in_place_type<T>, std::forward<C_Args>(args)...)
|
explicit constexpr variant_t(std::in_place_type_t<T>, C_Args&&... args): m_variant(std::in_place_type<T>, std::forward<C_Args>(args)...)
|
||||||
{}
|
{}
|
||||||
|
@ -208,8 +199,15 @@ namespace blt
|
||||||
return m_variant.valueless_by_exception();
|
return m_variant.valueless_by_exception();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename... Visitee>
|
template <typename T, std::enable_if_t<std::conjunction_v<std::is_invocable<decltype(&T::operator()), T, Types>...> || std::conjunction_v<
|
||||||
static constexpr auto make_visitor(Visitee&& visitees)
|
std::is_invocable<decltype(&T::operator()), Types>...>, bool> = true>
|
||||||
|
constexpr auto visit(T&& visitor) -> decltype(auto)
|
||||||
|
{
|
||||||
|
return std::visit(std::forward<T>(visitor), m_variant);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename... Visitee>
|
||||||
|
static constexpr auto make_visitor(Visitee&&... visitees)
|
||||||
{
|
{
|
||||||
// TODO: this is probably not the best way to handle these cases...
|
// TODO: this is probably not the best way to handle these cases...
|
||||||
using meta_t = detail::visit_return_type<std::tuple<Visitee...>, std::tuple<Types...>>;
|
using meta_t = detail::visit_return_type<std::tuple<Visitee...>, std::tuple<Types...>>;
|
||||||
|
@ -225,8 +223,7 @@ namespace blt
|
||||||
return typename meta_t::return_type{};
|
return typename meta_t::return_type{};
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
return typename meta_t::return_type(
|
return typename meta_t::return_type(std::forward<Visitee>(visitees)(std::forward<decltype(value)>(value)));
|
||||||
std::forward<Visitee>(visitees)(std::forward<decltype(value)>(value)));
|
|
||||||
}
|
}
|
||||||
}...
|
}...
|
||||||
};
|
};
|
||||||
|
@ -247,8 +244,7 @@ namespace blt
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
return typename meta_t::return_type(
|
return typename meta_t::return_type(
|
||||||
typename meta_t::base_type(
|
typename meta_t::base_type(std::forward<Visitee>(visitees)(std::forward<decltype(value)>(value))));
|
||||||
std::forward<Visitee>(visitees)(std::forward<decltype(value)>(value))));
|
|
||||||
}
|
}
|
||||||
}...
|
}...
|
||||||
};
|
};
|
||||||
|
@ -256,9 +252,7 @@ namespace blt
|
||||||
{
|
{
|
||||||
return lambda_visitor{
|
return lambda_visitor{
|
||||||
[&](std::tuple_element_t<0, typename meta::function_like<Visitee>::args_tuple> value) {
|
[&](std::tuple_element_t<0, typename meta::function_like<Visitee>::args_tuple> value) {
|
||||||
return typename meta_t::return_type{
|
return typename meta_t::return_type{std::forward<Visitee>(visitees)(std::forward<decltype(value)>(value))};
|
||||||
std::forward<Visitee>(visitees)(std::forward<decltype(value)>(value))
|
|
||||||
};
|
|
||||||
}...
|
}...
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 7ef2e733416953b222851f9a360d7fc72d068ee5
|
Subproject commit 93201da2ba5a6aba0a6e57ada64973555629b3e3
|
|
@ -15,9 +15,9 @@
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include <blt/std/variant.h>
|
|
||||||
#include <blt/logging/logging.h>
|
#include <blt/logging/logging.h>
|
||||||
#include <blt/std/assert.h>
|
#include <blt/std/assert.h>
|
||||||
|
#include <blt/std/variant.h>
|
||||||
|
|
||||||
struct base_type
|
struct base_type
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue