Al utilizar la variante double
de la función std::abs()
sin el std
con g ++ 4.6.1, no se muestra ninguna advertencia o error.Evitar problemas del compilador con abs()
#include <algorithm>
#include <cmath>
double foobar(double a)
{
return abs(a);
}
Esta versión de g ++ parece estar tirando en la variante de double
de abs()
en el espacio de nombres global a través de uno de los incluye de algorithm
. Esto parece que ahora está permitido por el estándar (vea esto question), pero no es obligatorio.
Si puedo compilar el código anterior utilizando un compilador que no tira la variante double
de abs()
en el espacio de nombres global (como g ++ 4.2), entonces el siguiente error se informa:
warning: passing 'double' for argument 1 to 'int abs(int)'
¿Cómo puedo forzar g ++ 4.6.1, y otros compiladores que extraen funciones en el espacio de nombres global, para dar una advertencia para que pueda evitar errores cuando se usa con otros compiladores?
¿Qué tiene de malo usar 'std :: abs' si esa es la función que necesita? –
@JonathanLeffler Nada, pero puede ser fácil perderse por error. No quiero que ese deslizamiento pase desapercibido y cause problemas de compilación con otros compiladores. –