acosl ist nicht im std namespace?

8

Laut cppreference acoslsollte 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?

Corentin Homosexuell
quelle
Welche Version von GCC? Hmm scheint in GCC 4.9.2
CoryKramer
@CoryKramer 9.2 und Abschneiden schlägt fehl. acoslohne std::Erfolg.
Ted Lyngmo
1
Ich bin nicht sicher, was los ist, aber beide acosl(4.0)und std::acos(4.0l)arbeiten. Auch das Hinzufügen -stdlib=libc++Marken std::acosl(4.0)arbeiten in Clang.
HolyBlackCat
2
Ich denke, dies ist ein GCC-Problem oder zumindest ein libstdc ++ - Problem. Code funktioniert gut mit clang hier , das libc ++ verwendet
NathanOliver

Antworten:

4

Dies scheint ein libstdc ++ - Fehler zu sein.

cmathIn libstdc ++ wird nicht nur ein #include <math.h>In eingeschlossen, namespace stdsondern 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 die acos(long double __x)Überlastung delegiert __builtin_acosl!)

In Clang wird das Problem durch den Wechsel zu libc ++ behoben. Mit libstdc ++ acoslsollte auch die Verwendung der globalen Namespace-Version von funktionieren.

Sie sollten einen Fehler auslösen . Ich denke, es ist durch Fehler # 79700 abgedeckt .

Asteroiden mit Flügeln
quelle