https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103250
Bug ID: 103250 Summary: Valarray replacement type introduces ambiguity Product: gcc Version: 10.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: egil.brendsdal at gmail dot com Target Milestone: --- Version/System/Options: Using built-in specs. COLLECT_GCC=/usr/pkg/gcc10/bin/gcc COLLECT_LTO_WRAPPER=/usr/pkg/gcc10/libexec/gcc/x86_64-redhat-linux/10.3.0/lto-wrapper Target: x86_64-redhat-linux Configured with: ../gcc-10.3.0/configure --disable-libstdcxx-pch --enable-nls --with-libiconv-prefix=/usr --enable-__cxa_atexit --with-gxx-include-dir=/usr/pkg/gcc10/include/c++/ --disable-multilib --enable-libssp --enable-languages='c obj-c++ objc fortran c++' --enable-shared --enable-long-long --with-local-prefix=/usr/pkg/gcc10 --enable-threads=posix --with-boot-ldflags='-static-libstdc++ -static-libgcc -Wl,-R/usr/pkg/gcc8/lib/gcc/x86_64-redhat-linux/8.4.0 -Wl,-R/usr/pkg/gcc8/lib64 -Wl,-R/usr/pkg/lib ' --with-system-zlib --without-zstd --with-arch=nocona --with-tune=nocona --with-fpmath=sse --prefix=/usr/pkg/gcc10 --build=x86_64-redhat-linux --host=x86_64-redhat-linux --infodir=/usr/pkg/gcc10/info --mandir=/usr/pkg/gcc10/man Thread model: posix Supported LTO compression algorithms: zlib gcc version 10.3.0 (GCC) Command line: /usr/pkg/gcc10/bin/c++ -std=c++17 gcc_bug.cpp Compiler output: gcc_bug.cpp: In instantiation of 'auto f(size_t) [with T = int; Q = tag; size_t = long unsigned int]': gcc_bug.cpp:38:37: required from here gcc_bug.cpp:33:11: error: ambiguous overload for 'operator/' (operand types are 'std::valarray<qaz::num<int, tag> >' and 'std::valarray<qaz::num<int, tag> >') 33 | return x/x; | ~^~ In file included from gcc_bug.cpp:1: /usr/pkg/gcc10/include/c++/valarray:1188:1: note: candidate: 'std::_Expr<std::__detail::_BinClos<std::__divides, std::_ValArray, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__divides, _Tp>::result_type> std::operator/(const std::valarray<_Tp>&, const std::valarray<_Tp>&) [with _Tp = qaz::num<int, tag>; typename std::__fun<std::__divides, _Tp>::result_type = qaz::num<int, tag>]' 1188 | _DEFINE_BINARY_OPERATOR(/, __divides) | ^~~~~~~~~~~~~~~~~~~~~~~ gcc_bug.cpp:23:58: note: candidate: 'std::valarray<decltype ((x[0] / y[0]))> qaz::operator/(const std::valarray<qaz::num<T, Q1> >&, const std::valarray<qaz::num<T, Q2> >&) [with T = int; Q1 = tag; Q2 = tag; decltype ((x[0] / y[0])) = int]' 23 | template < typename T, typename Q1, typename Q2 > auto operator/( const std::valarray< num<T,Q1> > &x, const std::valarray< num<T,Q2> > &y ) -> std::valarray< decltype(x[0]/y[0]) >; | ^~~~~~~~ File generated by -save-temps is attached.