http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57043
Bug #: 57043 Summary: converting overloaded complex function pow in C++11 is ambiguous Classification: Unclassified Product: gcc Version: 4.8.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: frederic.he...@upmc.fr problem template the code is trivial 2 lines: do not compile in version 4.9, 4.8.1 4.9 with /usr/local/bin/g++ -v -save-temps -std=c++11 -c bugcc.cpp the code: #include <complex> std::complex<double> (* powcc )( const std::complex<double> &, const std::complex<double> &) =std::pow; the output is COLLECT_GCC_OPTIONS='-mmacosx-version-min=10.8.3' '-v' '-save-temps' '-std=c++11' '-c' '-shared-libgcc' '-mtune=core2' /usr/local/libexec/gcc/x86_64-apple-darwin12.3.0/4.8.1/cc1plus -fpreprocessed bugcc.ii -fPIC -quiet -dumpbase bugcc.cpp -mmacosx-version-min=10.8.3 -mtune=core2 -auxbase bugcc -std=c++11 -version -o bugcc.s GNU C++ (GCC) version 4.8.1 20130404 (prerelease) (x86_64-apple-darwin12.3.0) compiled by GNU C version 4.8.1 20130404 (prerelease), GMP version 4.3.1, MPFR version 2.4.1, MPC version 0.8.1 heuristiques GGC: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU C++ (GCC) version 4.8.1 20130404 (prerelease) (x86_64-apple-darwin12.3.0) compiled by GNU C version 4.8.1 20130404 (prerelease), GMP version 4.3.1, MPFR version 2.4.1, MPC version 0.8.1 heuristiques GGC: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 848d439cd6121247863767d4caeedace bugcc.cpp:2:100: erreur: converting overloaded function ‘pow’ to type ‘struct std::complex<double> (*)(const struct std::complex<double>&, const struct std::complex<double>&)’ is ambiguous std::complex<double> (* powcc )( const std::complex<double> &, const std::complex<double> &) =std::pow; ^ In file included from bugcc.cpp:1:0: /usr/local/include/c++/4.8.1/complex:1023:5: note: candidats sont: std::complex<_Tp> std::pow(const std::complex<_Tp>&, const std::complex<_Tp>&) [with _Tp = double] pow(const complex<_Tp>& __x, const complex<_Tp>& __y) ^ In file included from bugcc.cpp:1:0: /usr/local/include/c++/4.8.1/complex:1871:5: note: std::complex<typename __gnu_cxx::__promote_2<_Tp, _Up>::__type> std::pow(const std::complex<_Tp>&, const std::complex<_Up>&) [with _Tp = double; _Up = double; typename __gnu_cxx::__promote_2<_Tp, _Up>::__type = double] pow(const std::complex<_Tp>& __x, const std::complex<_Up>& __y) ^