In chapter 3 of Programming: Principles and Practice using C++ (sixth printing), Stroustrup states (p.68): "Note that sqrt()
is not defined for an int
".
Here is a simple C++ program based on that chapter:
#include "std_lib_facilities.h"
int main()
{
int n = 3;
cout << "Square root of n == " << sqrt(n) << "\n";
}
Given the quote above, I would expect the process of compiling or running this program to fail in some way.
To my surprise, compiling it (with g++ (GCC) 4.2.1) and running it succeeded without errors or warnings, and produced the following perfectly decent output:
Square root of n == 1.73205
My question therefore is: if sqrt()
really is not defined for an int
, then why doesn't the program above fail somehow?
The 10 is being implicitly converted to a double. This will happen automatically as long as you have the correct function prototype for sqrt.
Edit: beaten by comments