De acordo com cppreference, a função acosl
deve estar no namespace std: https://en.cppreference.com/w/cpp/numeric/math/acos
No entanto, com o gcc (ou clang), o código abaixo não compila:
#include <cmath>
int main()
{
long double var = std::acosl(4.0);
return 0;
}
Eu recebi a seguinte mensagem de erro:
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
O que estou perdendo ? Estou interpretando mal a preferência?
acosl
semstd::
sucesso.acosl(4.0)
estd::acos(4.0l)
fazer o trabalho. Além disso, adicionar-stdlib=libc++
fazstd::acosl(4.0)
funcionar em Clang.Respostas:
Este parece ser um bug do libstdc ++.
cmath
O libstdc ++ não envolve apenas um#include <math.h>
innamespace std
: ele define novas funções que delegam aos built-ins. Eu acho que uma definição quer adicionar a este código fonte . Provavelmente foi apenas uma supervisão quando o C ++ 11 (via C99) introduziu a função. (Observe que aacos(long double __x)
sobrecarga delega para__builtin_acosl
!)No Clang, a mudança para libc ++ resolve o problema. Com libstdc ++, o uso da versão global do namespace
acosl
também deve funcionar.Você deve criar um bug .Eu acho que é coberto pelo bug # 79700 .fonte