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)và 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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.