feat: quantities of the same kind can now be added, subtracted, or compared to each other
This commit is contained in:
1 parent
9a7a55b873
commit
1b2d77af41
4 files changed
+143
-20
No files matched your search
@@ -80,4 +80,47 @@ concept is_derived_from_specialization_of = requires(T* t) { detail::to_base_spe
|
||||
template<typename T, typename... Ts>
|
||||
concept one_of = (false || ... || std::same_as<T, Ts>);
|
||||
|
||||
template<typename T, auto... Vs>
|
||||
consteval bool contains()
|
||||
{
|
||||
return (false || ... || is_same_v<std::remove_const_t<decltype(Vs)>, T>);
|
||||
}
|
||||
|
||||
template<template<typename...> typename T, typename... Ts>
|
||||
consteval bool contains()
|
||||
{
|
||||
return (false || ... || is_specialization_of<Ts, T>);
|
||||
}
|
||||
|
||||
template<typename T, std::same_as<T> auto V>
|
||||
consteval auto get()
|
||||
{
|
||||
return V;
|
||||
}
|
||||
|
||||
template<typename T, auto V1, auto V2, auto... Vs>
|
||||
consteval auto get()
|
||||
{
|
||||
if constexpr (is_same_v<T, std::remove_const_t<decltype(V1)>>)
|
||||
return V1;
|
||||
else
|
||||
return get<T, V2, Vs...>();
|
||||
}
|
||||
|
||||
template<template<typename...> typename T, typename T1>
|
||||
requires is_specialization_of<T1, T>
|
||||
consteval auto get()
|
||||
{
|
||||
return T1{};
|
||||
}
|
||||
|
||||
template<template<typename...> typename T, typename T1, typename T2, typename... Ts>
|
||||
consteval auto get()
|
||||
{
|
||||
if constexpr (is_specialization_of<T1, T2, T>)
|
||||
return T1{};
|
||||
else
|
||||
return get<T, T2, Ts...>();
|
||||
}
|
||||
|
||||
} // namespace mp_units
|
||||
Reference in new issue
Block a user