26 export template<
typename U_FROM,
typename U_TO,
typename T>
33 export template<
typename S_FROM,
typename S_TO,
typename U_FROM,
typename U_TO,
typename T>
39 template <
typename...>
41 template <
typename...>
42 struct equals: std::false_type {};
45 template <
typename A,
typename B>
46 using compare_eq =
typename compare<A>::template equals<B>;
48 template <
typename Arg1>
49 struct compare<Arg1> {
50 template <
typename...>
53 template <
typename Arg2>
55 constexpr static bool value = std::is_same_v<Arg1, Arg2>;
59 template <
template <
typename...>
typename Pack,
typename Arg1>
60 struct compare<Pack<Arg1>> {
61 template <
typename...>
64 template <
typename Arg2>
65 struct equals<Pack<Arg2>> {
66 constexpr static bool value = compare<Arg1>::template equals<Arg2>::value;
69 template <
typename Any>
70 struct equals<Any>: std::false_type {};
73 template <
template <
typename...>
typename Pack,
typename... Args1>
74 struct compare<Pack<Args1...>> {
75 template <
typename...>
78 template <
typename Arg2,
typename... Args2>
79 requires (
sizeof...(Args1) == (
sizeof...(Args2) + 1) && (compare_eq<Arg2, Args1>::value || ...))
80 struct equals<Pack<Arg2, Args2...>> {
82 using tmp =
typename packtl::take_one_out_w_predicate<typename compare<Arg2>::template equals<void>, packtl::pack<Args1...>>::type;
84 constexpr static bool value = compare_eq<tmp, packtl::pack<Args2...>>::value;
87 template <
typename Arg2,
typename... Args2>
88 requires (
sizeof...(Args1) == (
sizeof...(Args2) + 1) && (!compare_eq<Arg2, Args1>::value && ...))
89 struct equals<Pack<Arg2, Args2...>>: std::false_type { };
91 template <
typename... Args2>
92 requires (
sizeof...(Args1) !=
sizeof...(Args2))
93 struct equals<Pack<Args2...>>: std::false_type { };
95 template <
typename Any>
96 struct equals<Any>: std::false_type {};
101 export template<
typename U1,
typename U2>
104 export template<
typename U1,
typename U2>
109 export template<
typename Q,
typename S>
110 concept Quantity = std::same_as<typename Q::unit::scale, S>;
113 export template<
typename U,
typename T>
126 export template <
typename T>
138 export template <
typename T>
150 export template <
typename T>