@@ -54,13 +54,12 @@ inline T_actual&& forward_as(T_actual&& a) { // NOLINT
5454 * @return nothing, this always throws
5555 * @throw always throws std::runtime_error
5656 */
57- template <
58- typename T_desired, typename T_actual,
59- require_any_not_eigen_t <T_desired, T_actual>* = nullptr ,
60- typename = std::enable_if_t <
61- !std::is_same<std::decay<T_actual>, std::decay<T_desired>>::value
62- && !(std::is_arithmetic_v<std::decay_t <
63- T_desired>> && std::is_arithmetic_v<std::decay_t <T_actual>>)>>
57+ template <typename T_desired, typename T_actual,
58+ require_any_not_eigen_t <T_desired, T_actual>* = nullptr ,
59+ typename = std::enable_if_t <
60+ !std::is_same<std::decay<T_actual>, std::decay<T_desired>>::value
61+ && !(std::is_floating_point_v<std::decay_t <T_desired>>
62+ && std::is_integral_v<std::decay_t <T_actual>>)>>
6463inline T_desired forward_as (const T_actual& a) {
6564 throw std::runtime_error (" Wrong type assumed! Please file a bug report." );
6665}
@@ -80,13 +79,10 @@ inline T_desired forward_as(const T_actual& a) {
8079 * @param a input value
8180 * @return a
8281 */
83- template <
84- typename T_desired, typename T_actual,
85- typename = std::enable_if_t <
86- !std::is_same_v<
87- std::decay_t <T_actual>,
88- std::decay_t <
89- T_desired>> && std::is_arithmetic_v<std::decay_t <T_desired>> && std::is_arithmetic_v<std::decay_t <T_actual>>>>
82+ template <typename T_desired, typename T_actual,
83+ typename
84+ = std::enable_if_t <std::is_floating_point_v<std::decay_t <T_desired>>
85+ && std::is_integral_v<std::decay_t <T_actual>>>>
9086inline T_desired forward_as (const T_actual& a) {
9187 return static_cast <T_desired>(a);
9288}
0 commit comments