@@ -223,7 +223,7 @@ namespace xsimd
223223 * comparison dispatchers *
224224 **************************/
225225
226- template <class T >
226+ template <class T , class Enable = void >
227227 struct comp_return_type_impl ;
228228
229229 template <>
@@ -232,8 +232,8 @@ namespace xsimd
232232 using type = uint8x16_t ;
233233 };
234234
235- template <>
236- struct comp_return_type_impl <int8x16_t >
235+ template <class T >
236+ struct comp_return_type_impl <T, typename std::enable_if<std::is_same<T, int8x16_t >::value && !std::is_same< int8x16_t , uint8x16_t >::value>::type >
237237 {
238238 using type = uint8x16_t ;
239239 };
@@ -244,8 +244,8 @@ namespace xsimd
244244 using type = uint16x8_t ;
245245 };
246246
247- template <>
248- struct comp_return_type_impl <int16x8_t >
247+ template <class T >
248+ struct comp_return_type_impl <T, typename std::enable_if<std::is_same<T, int16x8_t >::value && !std::is_same< int16x8_t , uint16x8_t >::value>::type >
249249 {
250250 using type = uint16x8_t ;
251251 };
@@ -256,8 +256,8 @@ namespace xsimd
256256 using type = uint32x4_t ;
257257 };
258258
259- template <>
260- struct comp_return_type_impl <int32x4_t >
259+ template <class T >
260+ struct comp_return_type_impl <T, typename std::enable_if<std::is_same<T, int32x4_t >::value && !std::is_same< int32x4_t , uint32x4_t >::value>::type >
261261 {
262262 using type = uint32x4_t ;
263263 };
@@ -268,8 +268,8 @@ namespace xsimd
268268 using type = uint64x2_t ;
269269 };
270270
271- template <>
272- struct comp_return_type_impl <int64x2_t >
271+ template <class T >
272+ struct comp_return_type_impl <T, typename std::enable_if<std::is_same<T, int64x2_t >::value && !std::is_same< int64x2_t , uint64x2_t >::value>::type >
273273 {
274274 using type = uint64x2_t ;
275275 };
0 commit comments