@@ -215,6 +215,9 @@ namespace xsimd
215215 = std::enable_if_t <(std::is_integral<T>::value && sizeof (T) != 8 ) || std::is_same<T, float >::value, int >;
216216 }
217217
218+ template <typename T>
219+ using detail_identity_return_type = detail::identity_return_type<T>;
220+
218221 /* ************
219222 * broadcast *
220223 *************/
@@ -769,8 +772,8 @@ namespace xsimd
769772 * add *
770773 *******/
771774
772- WRAP_BINARY_INT (vaddq_u8, vaddq_s8, vaddq_u16, vaddq_s16, vaddq_u32, vaddq_s32, vaddq_u64, vaddq_s64, detail::identity_return_type )
773- WRAP_BINARY_FLOAT (vaddq_f32, detail::identity_return_type )
775+ WRAP_BINARY_INT (vaddq_u8, vaddq_s8, vaddq_u16, vaddq_s16, vaddq_u32, vaddq_s32, vaddq_u64, vaddq_s64, detail_identity_return_type )
776+ WRAP_BINARY_FLOAT (vaddq_f32, detail_identity_return_type )
774777
775778 template <class A , class T , detail::enable_neon_type_t <T> = 0 >
776779 XSIMD_INLINE batch<T, A> add (batch<T, A> const & lhs, batch<T, A> const & rhs, requires_arch<neon>) noexcept
@@ -788,7 +791,7 @@ namespace xsimd
788791 * avg *
789792 *******/
790793
791- WRAP_BINARY_UINT_EXCLUDING_64 (vhaddq_u8, vhaddq_u16, vhaddq_u32, detail::identity_return_type )
794+ WRAP_BINARY_UINT_EXCLUDING_64 (vhaddq_u8, vhaddq_u16, vhaddq_u32, detail_identity_return_type )
792795
793796 template <class A , class T , class = std::enable_if_t <(std::is_unsigned<T>::value && sizeof (T) != 8 )>>
794797 XSIMD_INLINE batch<T, A> avg (batch<T, A> const & lhs, batch<T, A> const & rhs, requires_arch<neon>) noexcept
@@ -804,7 +807,7 @@ namespace xsimd
804807 * avgr *
805808 ********/
806809
807- WRAP_BINARY_UINT_EXCLUDING_64 (vrhaddq_u8, vrhaddq_u16, vrhaddq_u32, detail::identity_return_type )
810+ WRAP_BINARY_UINT_EXCLUDING_64 (vrhaddq_u8, vrhaddq_u16, vrhaddq_u32, detail_identity_return_type )
808811
809812 template <class A , class T , class = std::enable_if_t <(std::is_unsigned<T>::value && sizeof (T) != 8 )>>
810813 XSIMD_INLINE batch<T, A> avgr (batch<T, A> const & lhs, batch<T, A> const & rhs, requires_arch<neon>) noexcept
@@ -820,7 +823,7 @@ namespace xsimd
820823 * sadd *
821824 ********/
822825
823- WRAP_BINARY_INT (vqaddq_u8, vqaddq_s8, vqaddq_u16, vqaddq_s16, vqaddq_u32, vqaddq_s32, vqaddq_u64, vqaddq_s64, detail::identity_return_type )
826+ WRAP_BINARY_INT (vqaddq_u8, vqaddq_s8, vqaddq_u16, vqaddq_s16, vqaddq_u32, vqaddq_s32, vqaddq_u64, vqaddq_s64, detail_identity_return_type )
824827
825828 template <class A , class T , detail::enable_neon_type_t <T> = 0 >
826829 XSIMD_INLINE batch<T, A> sadd (batch<T, A> const & lhs, batch<T, A> const & rhs, requires_arch<neon>) noexcept
@@ -838,8 +841,8 @@ namespace xsimd
838841 * sub *
839842 *******/
840843
841- WRAP_BINARY_INT (vsubq_u8, vsubq_s8, vsubq_u16, vsubq_s16, vsubq_u32, vsubq_s32, vsubq_u64, vsubq_s64, detail::identity_return_type )
842- WRAP_BINARY_FLOAT (vsubq_f32, detail::identity_return_type )
844+ WRAP_BINARY_INT (vsubq_u8, vsubq_s8, vsubq_u16, vsubq_s16, vsubq_u32, vsubq_s32, vsubq_u64, vsubq_s64, detail_identity_return_type )
845+ WRAP_BINARY_FLOAT (vsubq_f32, detail_identity_return_type )
843846
844847 template <class A , class T , detail::enable_neon_type_t <T> = 0 >
845848 XSIMD_INLINE batch<T, A> sub (batch<T, A> const & lhs, batch<T, A> const & rhs, requires_arch<neon>) noexcept
@@ -857,7 +860,7 @@ namespace xsimd
857860 * ssub *
858861 ********/
859862
860- WRAP_BINARY_INT (vqsubq_u8, vqsubq_s8, vqsubq_u16, vqsubq_s16, vqsubq_u32, vqsubq_s32, vqsubq_u64, vqsubq_s64, detail::identity_return_type )
863+ WRAP_BINARY_INT (vqsubq_u8, vqsubq_s8, vqsubq_u16, vqsubq_s16, vqsubq_u32, vqsubq_s32, vqsubq_u64, vqsubq_s64, detail_identity_return_type )
861864
862865 template <class A , class T , detail::enable_neon_type_t <T> = 0 >
863866 XSIMD_INLINE batch<T, A> ssub (batch<T, A> const & lhs, batch<T, A> const & rhs, requires_arch<neon>) noexcept
@@ -875,8 +878,8 @@ namespace xsimd
875878 * mul *
876879 *******/
877880
878- WRAP_BINARY_INT_EXCLUDING_64 (vmulq_u8, vmulq_s8, vmulq_u16, vmulq_s16, vmulq_u32, vmulq_s32, detail::identity_return_type )
879- WRAP_BINARY_FLOAT (vmulq_f32, detail::identity_return_type )
881+ WRAP_BINARY_INT_EXCLUDING_64 (vmulq_u8, vmulq_s8, vmulq_u16, vmulq_s16, vmulq_u32, vmulq_s32, detail_identity_return_type )
882+ WRAP_BINARY_FLOAT (vmulq_f32, detail_identity_return_type )
880883
881884 template <class A , class T , detail::exclude_int64_neon_t <T> = 0 >
882885 XSIMD_INLINE batch<T, A> mul (batch<T, A> const & lhs, batch<T, A> const & rhs, requires_arch<neon>) noexcept
@@ -1150,7 +1153,7 @@ namespace xsimd
11501153 * bitwise_and *
11511154 ***************/
11521155
1153- WRAP_BINARY_INT (vandq_u8, vandq_s8, vandq_u16, vandq_s16, vandq_u32, vandq_s32, vandq_u64, vandq_s64, detail::identity_return_type )
1156+ WRAP_BINARY_INT (vandq_u8, vandq_s8, vandq_u16, vandq_s16, vandq_u32, vandq_s32, vandq_u64, vandq_s64, detail_identity_return_type )
11541157
11551158 namespace detail
11561159 {
@@ -1190,7 +1193,7 @@ namespace xsimd
11901193 * bitwise_or *
11911194 **************/
11921195
1193- WRAP_BINARY_INT (vorrq_u8, vorrq_s8, vorrq_u16, vorrq_s16, vorrq_u32, vorrq_s32, vorrq_u64, vorrq_s64, detail::identity_return_type )
1196+ WRAP_BINARY_INT (vorrq_u8, vorrq_s8, vorrq_u16, vorrq_s16, vorrq_u32, vorrq_s32, vorrq_u64, vorrq_s64, detail_identity_return_type )
11941197
11951198 namespace detail
11961199 {
@@ -1230,7 +1233,7 @@ namespace xsimd
12301233 * bitwise_xor *
12311234 ***************/
12321235
1233- WRAP_BINARY_INT (veorq_u8, veorq_s8, veorq_u16, veorq_s16, veorq_u32, veorq_s32, veorq_u64, veorq_s64, detail::identity_return_type )
1236+ WRAP_BINARY_INT (veorq_u8, veorq_s8, veorq_u16, veorq_s16, veorq_u32, veorq_s32, veorq_u64, veorq_s64, detail_identity_return_type )
12341237
12351238 namespace detail
12361239 {
@@ -1320,7 +1323,7 @@ namespace xsimd
13201323 * bitwise_andnot *
13211324 ******************/
13221325
1323- WRAP_BINARY_INT (vbicq_u8, vbicq_s8, vbicq_u16, vbicq_s16, vbicq_u32, vbicq_s32, vbicq_u64, vbicq_s64, detail::identity_return_type )
1326+ WRAP_BINARY_INT (vbicq_u8, vbicq_s8, vbicq_u16, vbicq_s16, vbicq_u32, vbicq_s32, vbicq_u64, vbicq_s64, detail_identity_return_type )
13241327
13251328 namespace detail
13261329 {
@@ -1359,8 +1362,8 @@ namespace xsimd
13591362 * min *
13601363 *******/
13611364
1362- WRAP_BINARY_INT_EXCLUDING_64 (vminq_u8, vminq_s8, vminq_u16, vminq_s16, vminq_u32, vminq_s32, detail::identity_return_type )
1363- WRAP_BINARY_FLOAT (vminq_f32, detail::identity_return_type )
1365+ WRAP_BINARY_INT_EXCLUDING_64 (vminq_u8, vminq_s8, vminq_u16, vminq_s16, vminq_u32, vminq_s32, detail_identity_return_type )
1366+ WRAP_BINARY_FLOAT (vminq_f32, detail_identity_return_type )
13641367
13651368 template <class A , class T , detail::exclude_int64_neon_t <T> = 0 >
13661369 XSIMD_INLINE batch<T, A> min (batch<T, A> const & lhs, batch<T, A> const & rhs, requires_arch<neon>) noexcept
@@ -1383,8 +1386,8 @@ namespace xsimd
13831386 * max *
13841387 *******/
13851388
1386- WRAP_BINARY_INT_EXCLUDING_64 (vmaxq_u8, vmaxq_s8, vmaxq_u16, vmaxq_s16, vmaxq_u32, vmaxq_s32, detail::identity_return_type )
1387- WRAP_BINARY_FLOAT (vmaxq_f32, detail::identity_return_type )
1389+ WRAP_BINARY_INT_EXCLUDING_64 (vmaxq_u8, vmaxq_s8, vmaxq_u16, vmaxq_s16, vmaxq_u32, vmaxq_s32, detail_identity_return_type )
1390+ WRAP_BINARY_FLOAT (vmaxq_f32, detail_identity_return_type )
13881391
13891392 template <class A , class T , detail::exclude_int64_neon_t <T> = 0 >
13901393 XSIMD_INLINE batch<T, A> max (batch<T, A> const & lhs, batch<T, A> const & rhs, requires_arch<neon>) noexcept
0 commit comments