acosl no está en el espacio de nombres estándar?

8

Según cppreference, la función acosldebe 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?

Corentin Gay
fuente
¿Qué versión de GCC? Hmm parece reproducible en GCC 4.9.2
CoryKramer
@CoryKramer 9.2 y trunc falla. acoslsin std::triunfos
Ted Lyngmo
1
No estoy seguro de lo que está pasando, pero ambos acosl(4.0)y std::acos(4.0l)trabajo. Además, agregar -stdlib=libc++hace que std::acosl(4.0)funcione en Clang.
HolyBlackCat
2
Creo que este es un problema de GCC, o al menos un problema de libstdc ++. El código funciona bien con clang aquí que usa libc ++
NathanOliver

Respuestas:

4

Esto parece ser un error de libstdc ++.

cmathen libstdc ++ no se limita a envolver una #include <math.h>en namespace 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 la acos(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 acosltambién debería funcionar.

Deberías plantear un error . Creo que está cubierto por el error # 79700 .

Asteroides con alas
fuente