@@ -151,16 +151,17 @@ quad_to_quad_strided_loop_aligned(PyArrayMethod_Context *context, char *const da
151
151
return 0 ;
152
152
}
153
153
154
- // Template magic to ensure npy_bool/npy_ubyte and npy_half/npy_ushort do not alias in templates
155
- struct my_npy_bool {};
156
- struct my_npy_half {};
154
+ // Tag dispatching to ensure npy_bool/npy_ubyte and npy_half/npy_ushort do not alias in templates
155
+ // see e.g. https://stackoverflow.com/q/32522279
156
+ struct spec_npy_bool {};
157
+ struct spec_npy_half {};
157
158
158
159
template <typename T>
159
160
struct NpyType { typedef T TYPE; };
160
161
template <>
161
- struct NpyType <my_npy_bool >{ typedef npy_bool TYPE; };
162
+ struct NpyType <spec_npy_bool >{ typedef npy_bool TYPE; };
162
163
template <>
163
- struct NpyType <my_npy_half >{ typedef npy_half TYPE; };
164
+ struct NpyType <spec_npy_half >{ typedef npy_half TYPE; };
164
165
165
166
// Casting from other types to QuadDType
166
167
@@ -170,7 +171,7 @@ to_quad(typename NpyType<T>::TYPE x, QuadBackendType backend);
170
171
171
172
template <>
172
173
inline quad_value
173
- to_quad<my_npy_bool >(npy_bool x, QuadBackendType backend)
174
+ to_quad<spec_npy_bool >(npy_bool x, QuadBackendType backend)
174
175
{
175
176
quad_value result;
176
177
if (backend == BACKEND_SLEEF) {
@@ -324,7 +325,7 @@ to_quad<npy_ulonglong>(npy_ulonglong x, QuadBackendType backend)
324
325
325
326
template <>
326
327
inline quad_value
327
- to_quad<my_npy_half >(npy_half x, QuadBackendType backend)
328
+ to_quad<spec_npy_half >(npy_half x, QuadBackendType backend)
328
329
{
329
330
quad_value result;
330
331
if (backend == BACKEND_SLEEF) {
@@ -466,7 +467,7 @@ from_quad(quad_value x, QuadBackendType backend);
466
467
467
468
template <>
468
469
inline npy_bool
469
- from_quad<my_npy_bool >(quad_value x, QuadBackendType backend)
470
+ from_quad<spec_npy_bool >(quad_value x, QuadBackendType backend)
470
471
{
471
472
if (backend == BACKEND_SLEEF) {
472
473
return Sleef_cast_to_int64q1 (x.sleef_value ) != 0 ;
@@ -598,7 +599,7 @@ from_quad<npy_ulonglong>(quad_value x, QuadBackendType backend)
598
599
599
600
template <>
600
601
inline npy_half
601
- from_quad<my_npy_half >(quad_value x, QuadBackendType backend)
602
+ from_quad<spec_npy_half >(quad_value x, QuadBackendType backend)
602
603
{
603
604
if (backend == BACKEND_SLEEF) {
604
605
return npy_double_to_half (Sleef_cast_to_doubleq1 (x.sleef_value ));
@@ -804,7 +805,7 @@ init_casts_internal(void)
804
805
805
806
add_spec (quad2quad_spec);
806
807
807
- add_cast_to<my_npy_bool >(&PyArray_BoolDType);
808
+ add_cast_to<spec_npy_bool >(&PyArray_BoolDType);
808
809
add_cast_to<npy_byte>(&PyArray_ByteDType);
809
810
add_cast_to<npy_ubyte>(&PyArray_UByteDType);
810
811
add_cast_to<npy_short>(&PyArray_ShortDType);
@@ -815,12 +816,12 @@ init_casts_internal(void)
815
816
add_cast_to<npy_ulong>(&PyArray_ULongDType);
816
817
add_cast_to<npy_longlong>(&PyArray_LongLongDType);
817
818
add_cast_to<npy_ulonglong>(&PyArray_ULongLongDType);
818
- add_cast_to<my_npy_half >(&PyArray_HalfDType);
819
+ add_cast_to<spec_npy_half >(&PyArray_HalfDType);
819
820
add_cast_to<float >(&PyArray_FloatDType);
820
821
add_cast_to<double >(&PyArray_DoubleDType);
821
822
add_cast_to<long double >(&PyArray_LongDoubleDType);
822
823
823
- add_cast_from<my_npy_bool >(&PyArray_BoolDType);
824
+ add_cast_from<spec_npy_bool >(&PyArray_BoolDType);
824
825
add_cast_from<npy_byte>(&PyArray_ByteDType);
825
826
add_cast_from<npy_ubyte>(&PyArray_UByteDType);
826
827
add_cast_from<npy_short>(&PyArray_ShortDType);
@@ -831,7 +832,7 @@ init_casts_internal(void)
831
832
add_cast_from<npy_ulong>(&PyArray_ULongDType);
832
833
add_cast_from<npy_longlong>(&PyArray_LongLongDType);
833
834
add_cast_from<npy_ulonglong>(&PyArray_ULongLongDType);
834
- add_cast_from<my_npy_half >(&PyArray_HalfDType);
835
+ add_cast_from<spec_npy_half >(&PyArray_HalfDType);
835
836
add_cast_from<float >(&PyArray_FloatDType);
836
837
add_cast_from<double >(&PyArray_DoubleDType);
837
838
add_cast_from<long double >(&PyArray_LongDoubleDType);
0 commit comments