https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70318
Marc Glisse <glisse at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #1 from Marc Glisse <glisse at gcc dot gnu.org> --- What the standard requires is essentially: namespace std { double sqrt(int); double sqrt(long); ... } (you should not specify a template parameter for your call to sqrt, that makes your program not portable) What g++ -Wfloat-conversion is telling you is that you are assigning a double to an int. You would get essentially the same warning with int i = 3.14; It isn't clear what you are expecting here. Did you interpret the standard as providing int sqrt(int); long sqrt(long); etc?