https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90638
--- Comment #10 from Jonathan Wakely <redi at gcc dot gnu.org> --- As a workaround for C++03, you can either change the type of lp1 and lp2 to double, or cast them when used: std::cout<<' '<<pow(var0, (double) lp1) <<' '<<pow(var0, (double) lp2) <<'\n'<<'\n'; std::cout<<' '<<pow(vard0, (long double) lp1) <<' '<<pow(vard0, (long double) lp2) <<'\n'<<'\n'; This will prevent the pow(const complex<T>&, int) overload being used.