Opened 3 days ago
Last modified 2 days ago
#71272 new defect
legacy-support breaks a valid code: error: no match for 'operator*' (operand types are 'double' and 'std::complex<float>')
Reported by: | barracuda156 | Owned by: | |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | 2.10.4 |
Keywords: | Cc: | macportsraf, fhgwright (Fred Wright), kencu (Ken), mascguy (Christopher Nielsen) | |
Port: | legacy-support-devel |
Description
Take a look at this issue with scipy
: https://github.com/scipy/scipy/issues/21826
Wasting a lot of time, both of scipy
upstream and my own, I finally dug this out: it is legacysupport
breaking this.
Specifically, identical command errs out with legacysupport
headers, but compiles normally without it:
36-50% sudo /opt/local/bin/g++-mp-14 -I/opt/local/include/LegacySupport -Iscipy/special/_special_ufuncs.cpython-311-darwin.so.p -Iscipy/special -I../scipy/special -Iscipy/_lib -I../scipy/_lib -I../scipy/_build_utils/src -I../../../../../../../../Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/numpy/core/include -I/opt/local/Library/Frameworks/Python.framework/Versions/3.11/include/python3.11 -fvisibility=hidden -fvisibility-inlines-hidden -fdiagnostics-color=always -DNDEBUG -Wall -Winvalid-pch -std=gnu++17 -O3 -D_GLIBCXX_USE_CXX11_ABI=0 -isysroot/ -DSP_SPECFUN_ERROR -DNPY_NO_DEPRECATED_API=NPY_1_9_API_VERSION -MD -MQ scipy/special/_special_ufuncs.cpython-311-darwin.so.p/_special_ufuncs.cpp.o -MF scipy/special/_special_ufuncs.cpython-311-darwin.so.p/_special_ufuncs.cpp.o.d -o scipy/special/_special_ufuncs.cpython-311-darwin.so.p/_special_ufuncs.cpp.o -c ../scipy/special/_special_ufuncs.cpp In file included from ../scipy/special/special/specfun.h:4, from ../scipy/special/special.h:6, from ../scipy/special/_special_ufuncs.cpp:7: ../scipy/special/special/specfun/specfun.h: In instantiation of 'std::complex<_Tp> special::specfun::e1z(std::complex<_Tp>) [with T = float]': ../scipy/special/special/expint.h:17:40: required from 'std::complex<_Tp> special::exp1(std::complex<_Tp>) [with T = float]' 17 | std::complex<T> outz = specfun::e1z(z); | ~~~~~~~~~~~~^~~ ../scipy/special/_special_ufuncs.cpp:304:47: required from here 304 | static_cast<func_F_F_t>(special::exp1), static_cast<func_D_D_t>(special::exp1)}, | ^ ../scipy/special/special/specfun/specfun.h:2099:70: error: no match for 'operator*' (operand types are 'double' and 'std::complex<float>') 2099 | ce1 = -el - std::log(-z) + z*ce1 - copysign(pi, z.imag())*std::complex<T>(0.0, 1.0); | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../scipy/special/special/error.h:27, from ../scipy/special/sf_error_state.h:4, from ../scipy/special/sf_error.h:3, from ../scipy/special/ufunc.h:17, from ../scipy/special/_special_ufuncs.cpp:1: /opt/local/include/gcc14/c++/complex:400:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator*(const complex<_Tp>&, const complex<_Tp>&)' 400 | operator*(const complex<_Tp>& __x, const complex<_Tp>& __y) | ^~~~~~~~ /opt/local/include/gcc14/c++/complex:400:5: note: template argument deduction/substitution failed: ../scipy/special/special/specfun/specfun.h:2099:70: note: mismatched types 'const std::complex<_Tp>' and 'double' 2099 | ce1 = -el - std::log(-z) + z*ce1 - copysign(pi, z.imag())*std::complex<T>(0.0, 1.0); | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~ /opt/local/include/gcc14/c++/complex:409:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator*(const complex<_Tp>&, const _Tp&)' 409 | operator*(const complex<_Tp>& __x, const _Tp& __y) | ^~~~~~~~ /opt/local/include/gcc14/c++/complex:409:5: note: template argument deduction/substitution failed: ../scipy/special/special/specfun/specfun.h:2099:70: note: mismatched types 'const std::complex<_Tp>' and 'double' 2099 | ce1 = -el - std::log(-z) + z*ce1 - copysign(pi, z.imag())*std::complex<T>(0.0, 1.0); | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~ /opt/local/include/gcc14/c++/complex:418:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator*(const _Tp&, const complex<_Tp>&)' 418 | operator*(const _Tp& __x, const complex<_Tp>& __y) | ^~~~~~~~ /opt/local/include/gcc14/c++/complex:418:5: note: template argument deduction/substitution failed: ../scipy/special/special/specfun/specfun.h:2099:70: note: deduced conflicting types for parameter '_Tp' ('double' and 'float') 2099 | ce1 = -el - std::log(-z) + z*ce1 - copysign(pi, z.imag())*std::complex<T>(0.0, 1.0); | ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~ 36-50% sudo /opt/local/bin/g++-mp-14 -Iscipy/special/_special_ufuncs.cpython-311-darwin.so.p -Iscipy/special -I../scipy/special -Iscipy/_lib -I../scipy/_lib -I../scipy/_build_utils/src -I../../../../../../../../Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/numpy/core/include -I/opt/local/Library/Frameworks/Python.framework/Versions/3.11/include/python3.11 -fvisibility=hidden -fvisibility-inlines-hidden -fdiagnostics-color=always -DNDEBUG -Wall -Winvalid-pch -std=gnu++17 -O3 -D_GLIBCXX_USE_CXX11_ABI=0 -isysroot/ -DSP_SPECFUN_ERROR -DNPY_NO_DEPRECATED_API=NPY_1_9_API_VERSION -MD -MQ scipy/special/_special_ufuncs.cpython-311-darwin.so.p/_special_ufuncs.cpp.o -MF scipy/special/_special_ufuncs.cpython-311-darwin.so.p/_special_ufuncs.cpp.o.d -o scipy/special/_special_ufuncs.cpython-311-darwin.so.p/_special_ufuncs.cpp.o -c ../scipy/special/_special_ufuncs.cpp 36-50%
Since spicy
port uses legacysupport
PG, it gets passed via environment, and that breaks the build here.
Change History (2)
comment:1 Changed 3 days ago by barracuda156
comment:2 Changed 2 days ago by mascguy (Christopher Nielsen)
Cc: | mascguy added |
---|
Note: See
TracTickets for help on using
tickets.
Just in case, defining
__MP_LEGACY_SUPPORT_CXX11_CMATH__
to 0 or 1 (viaMacportsLegacySupport.h
) does not change the error.