124 if constexpr(std::is_same_v<FROM, TO> || (isBoolean<FROM> && isBoolean<TO>)) {
128 if constexpr(std::is_same_v<FROM, ChimeraTK::Void> || std::is_same_v<TO, ChimeraTK::Void>) {
133 if constexpr(!std::is_floating_point_v<TO> || std::is_floating_point_v<FROM>) {
137 if constexpr(detail::greaterMaximum<FROM, TO>()) {
139 if(value >= FROM(std::numeric_limits<TO>::max())) {
140 if constexpr(std::is_floating_point_v<FROM> && std::is_floating_point_v<TO>) {
141 if(std::isinf(value)) {
142 return std::numeric_limits<TO>::infinity();
145 return std::numeric_limits<TO>::max();
148 if constexpr(std::is_signed_v<FROM> && !std::is_signed_v<TO> && !isBoolean<TO>) {
154 if constexpr(std::is_signed_v<FROM> && std::is_signed_v<TO>) {
155 if constexpr(detail::lesserMinimum<FROM, TO>()) {
157 if(value <= FROM(std::numeric_limits<TO>::lowest())) {
158 if constexpr(std::is_floating_point_v<FROM> && std::is_floating_point_v<TO>) {
159 if(std::isinf(value)) {
160 return -std::numeric_limits<TO>::infinity();
163 return std::numeric_limits<TO>::lowest();
170 if constexpr(std::is_floating_point_v<FROM> && !std::is_floating_point_v<TO>) {
172 return detail::roundAndCast<TO>(value);