Laut cppreference acosl
sollte sich die Funktion im Standard- Namespace befinden: https://en.cppreference.com/w/cpp/numeric/math/acos
Mit gcc (oder clang) wird der folgende Code jedoch nicht kompiliert:
#include <cmath>
int main()
{
long double var = std::acosl(4.0);
return 0;
}
Ich erhalte die folgende Fehlermeldung:
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
Was vermisse ich ? Verstehe ich cppreference falsch?
acosl
ohnestd::
Erfolg.acosl(4.0)
undstd::acos(4.0l)
arbeiten. Auch das Hinzufügen-stdlib=libc++
Markenstd::acosl(4.0)
arbeiten in Clang.Antworten:
Dies scheint ein libstdc ++ - Fehler zu sein.
cmath
In libstdc ++ wird nicht nur ein#include <math.h>
In eingeschlossen,namespace std
sondern es werden neue Funktionen definiert, die an integrierte Funktionen delegiert werden. Ich denke, eine Definition möchte diesen Quellcode ergänzen . Es war wahrscheinlich nur ein Versehen, als C ++ 11 (über C99) die Funktion einführte. (Beachten Sie jedoch, dass dieacos(long double __x)
Überlastung delegiert__builtin_acosl
!)In Clang wird das Problem durch den Wechsel zu libc ++ behoben. Mit libstdc ++
acosl
sollte auch die Verwendung der globalen Namespace-Version von funktionieren.Sie sollten einen Fehler auslösen .Ich denke, es ist durch Fehler # 79700 abgedeckt .quelle