acosl 不在 std 命名空间中?

Man*_*non 8 c++ c++11

根据 cppreference,该函数acosl应该在 std 命名空间中:https : //en.cppreference.com/w/cpp/numeric/math/acos

但是,使用 gcc(或 clang),以下代码无法编译:

#include <cmath>                                                                 

int main()                                                                       
{                                                                                
        long double var = std::acosl(4.0);                                      
        return 0;                                                                
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

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
Run Code Online (Sandbox Code Playgroud)

我错过了什么?我误读了 cppreference 吗?

Ast*_*ngs 4

这似乎是一个 libstdc++ 错误。

cmathin libstdc++ 不只是包装#include <math.h>in namespace std:它定义了委托给内置函数的新函数。我想一个定义想要添加到这个源代码中。当 C++11(通过 C99)引入该函数时,这可能只是一个疏忽。(尽管请注意,acos(long double __x)重载委托给了__builtin_acosl!)

在 Clang 中,切换到 libc++ 可以解决该问题。对于 libstdc++,使用全局命名空间版本acosl也应该可以工作。

你应该提出一个错误我认为它已被bug #79700覆盖。