acosl không có trong không gian tên std?


8

Theo cppreference, hàm acoslphải nằm trong không gian tên std: https://en.cppreference.com/w/cpp/numeric/math/acos

Tuy nhiên, với gcc (hoặc clang), mã bên dưới không biên dịch:

#include <cmath>                                                                 

int main()                                                                       
{                                                                                
        long double var = std::acosl(4.0);                                      
        return 0;                                                                
}

Tôi nhận được thông báo lỗi sau:

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

Tôi đang thiếu gì? Có phải tôi đang đọc sai cppreference?


Phiên bản nào của GCC? Hmm dường như có thể tái tạo trong GCC 4.9.2
CoryKramer

@CoryKramer 9.2 và trunc không thành công. acoslkhông std::thành công
Ted Lyngmo

1
Tôi không chắc chắn những gì đang xảy ra, nhưng cả hai acosl(4.0)std::acos(4.0l)làm việc. Ngoài ra, thêm -stdlib=libc++làm cho std::acosl(4.0)công việc trong Clang.
HolyBlackCat

2
Tôi nghĩ rằng đây là một vấn đề GCC, hoặc ít nhất là một vấn đề libstdc ++. Mã hoạt động tốt với tiếng kêu ở đây sử dụng libc ++
NathanOliver

Câu trả lời:


4

Đây có vẻ là một lỗi libstdc ++.

cmathtrong libstdc ++ không chỉ gói gọn #include <math.h>trong namespace std: nó xác định các hàm mới ủy nhiệm cho các phần dựng sẵn. Tôi đoán một định nghĩa muốn thêm vào mã nguồn này . Nó có lẽ chỉ là một sự giám sát khi C ++ 11 (thông qua C99) giới thiệu chức năng này. (Mặc dù lưu ý rằng các acos(long double __x)đại biểu quá tải đến __builtin_acosl!)

Trong Clang, chuyển sang libc ++ giải quyết vấn đề. Với libstdc ++, sử dụng phiên bản không gian tên toàn cầu acoslcũng sẽ hoạt động.

Bạn nên đưa ra một lỗi . Tôi nghĩ rằng nó được bao phủ bởi lỗi # 79700 .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.