5 # ifndef VCCC_TYPE_TRAITS_LOSSLESS_TYPE_HPP
6 # define VCCC_TYPE_TRAITS_LOSSLESS_TYPE_HPP
19 template<
typename ...Types>
29 template<
typename ...Ts>
40 template<
typename T1,
typename T2>
41 struct lossless_type_add<T1, T2> {
42 using type = decltype(
static_cast<lossless_type_add_t<T1>
>(0) +
43 static_cast<lossless_type_add_t<T2>
>(0));
46 template<
typename T1,
typename T2,
typename ...Ts>
47 struct lossless_type_add<T1, T2, Ts...> {
48 using type = decltype(
static_cast<lossless_type_add_t<T1, T2>
>(0) +
61 template<
typename ...Ts>
71 template<
typename T1,
typename T2>
72 struct lossless_type_mul<T1, T2> {
74 decltype(
static_cast<lossless_type_mul_t<T1>
>(0) *
75 static_cast<lossless_type_mul_t<T2>
>(0));
78 template<
typename T1,
typename T2,
typename ...Ts>
79 struct lossless_type_mul<T1, T2, Ts...> {
81 decltype(
static_cast<lossless_type_mul_t<T1, T2>
>(0) *
95 template<
typename ...Ts>
106 template<
typename T1,
typename T2>
107 struct lossless_type_div<T1, T2> {
110 internal::lossless_type_int_division_t<T1, T2>,
111 decltype(
static_cast<lossless_type_div_t<T1>
>(0) /
112 static_cast<lossless_type_div_t<T2>
>(0))>;
115 template<
typename T1,
typename T2,
typename ...Ts>
116 struct lossless_type_div<T1, T2, Ts...> {
118 decltype(
static_cast<lossless_type_div_t<T1, T2>
>(0) /
typename lossless_type_div< Ts... >::type lossless_type_div_t
Definition: lossless_type.hpp:96
typename std::conditional_t< conjunction< std::is_same< Types, float >... >::value, float, double > decay_if_float_t
Definition: lossless_type.hpp:20
typename lossless_type_mul< Ts... >::type lossless_type_mul_t
Definition: lossless_type.hpp:62
typename lossless_type_add< Ts... >::type lossless_type_add_t
Definition: lossless_type.hpp:30
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35
Definition: lossless_type.hpp:27
Definition: lossless_type.hpp:93
Definition: lossless_type.hpp:59