Por que sqrt () funciona bem em uma variável int se não estiver definida para um int?

No capítulo 3 doProgramação: Princípios e Prática usando C ++ (sexta impressão), afirma Stroustrup (p.68):"Observe quesqrt() não está definido para umint".

Aqui está um programa C ++ simples baseado nesse capítulo:

#include "std_lib_facilities.h"

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

Dada a citação acima, eu esperaria que o processo de compilação ou execução desse programa falhasse de alguma forma.

Para minha surpresa, compilá-lo (com g ++ (GCC) 4.2.1) e executá-lo com sucesso sem erros ou avisos, e produziu a seguinte saída perfeitamente decente:

Square root of n == 1.73205

Minha pergunta, portanto, é: sesqrt() realmente não está definido para umintEntão, por que o programa acima não falha de alguma forma?

questionAnswers(6)

yourAnswerToTheQuestion