Según cppreference, la función acosl
debe estar en el espacio de nombres estándar: https://en.cppreference.com/w/cpp/numeric/math/acos
Sin embargo, con gcc (o clang), el siguiente código no se compila:
#include <cmath>
int main()
{
long double var = std::acosl(4.0);
return 0;
}
Me sale el siguiente mensaje de error:
gay@latitude-7490:~$ g++ -std=c++11 test.cpp
test.cpp: In function 'int main()':
test.cpp:5:26: error: 'acosl' is not a member of 'std'; did you mean 'acosh'?
5 | long double truc = std::acosl( (long double)4.0);
| ^~~~~
| acosh
Qué me estoy perdiendo ? ¿Estoy leyendo mal la cppreference?
acosl
sinstd::
triunfosacosl(4.0)
ystd::acos(4.0l)
trabajo. Además, agregar-stdlib=libc++
hace questd::acosl(4.0)
funcione en Clang.Respuestas:
Esto parece ser un error de libstdc ++.
cmath
en libstdc ++ no se limita a envolver una#include <math.h>
ennamespace std
: define las nuevas funciones que el delegado de muebles empotrados. Supongo que una definición quiere agregar a este código fuente . Probablemente fue solo un descuido cuando C ++ 11 (a través de C99) introdujo la función. (¡Aunque note que laacos(long double __x)
sobrecarga delega a__builtin_acosl
!)En Clang, cambiar a libc ++ resuelve el problema. Con libstdc ++, usar la versión de espacio de nombres global de
acosl
también debería funcionar.Deberías plantear un error .Creo que está cubierto por el error # 79700 .fuente