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)
     ^

Reply via email to