¿Por qué sqrt () funciona bien en una variable int si no está definida para un int?

En el capitulo 3 deProgramación: Principios y Práctica utilizando C ++. (sexta impresión), estados de Stroustrup (p.68):"Tenga en cuenta quesqrt() no está definido para unint".

Aquí hay un programa simple de C ++ basado en ese capítulo:

#include "std_lib_facilities.h"

int main()
{
    int n = 3;
    cout << "Square root of n == " << sqrt(n) << "\n";
}

Dada la cita anterior, esperaría que el proceso de compilación o ejecución de este programa falle de alguna manera.

Para mi sorpresa, compilarlo (con g ++ (GCC) 4.2.1) y ejecutarlo tuvo éxito sin errores ni advertencias, y produjo el siguiente resultado perfectamente decente:

Square root of n == 1.73205

Por lo tanto, mi pregunta es: sisqrt() Realmente no está definido para unaint, entonces ¿por qué el programa anterior no falla de alguna manera?

Respuestas a la pregunta(6)

Su respuesta a la pregunta