Trong khi tìm hiểu về các vấn đề liên kết vv, tôi nhận ra rằng việc triển khai g ++ 4.9 (macports OS X) không hỗ trợ cho std::align
. Nếu tôi cố gắng biên dịch (với -std=c++11
) mã ví dụ này từ http://www.cplusplus.com/reference/memory/align/std :: align không được hỗ trợ bởi g ++ 4.9
// align example
#include <iostream>
#include <memory>
int main() {
char buffer[] = "------------------------";
void * pt = buffer;
std::size_t space = sizeof(buffer) - 1;
while (std::align(alignof(int), sizeof(char), pt, space)) {
char* temp = static_cast<char*>(pt);
*temp = '*'; ++temp; space -= sizeof(char);
pt = temp;
}
std::cout << buffer << '\n';
return 0;
}
trình biên dịch spits ra lỗi
error: 'align' is not a member of 'std'
Điều này có vẻ kỳ lạ như g ++ dường như đã thực hiện hỗ trợ sự liên kết từ g ++ 4.8 , https://gcc.gnu.org/projects/cxx0x.html (N2341)
Mã biên dịch dưới dạng clang ++ mà không gặp bất kỳ sự cố nào.
Đây có phải là vấn đề nổi tiếng của g ++ mà tôi không biết? Các trình biên dịch trực tuyến mà tôi đã thử nghiệm (ideone và coliru) cũng từ chối mã đó.
Cảm ơn liên kết, chỉ thấy rằng nó không được tạo trong g ++ 4.9, mặc dù lỗi được báo cáo nhiều hơn hơn một năm trước. – vsoftco
@vsoftco, "g ++ 4.9 trunk" không có ý nghĩa. Không có "g ++ 4.9 trunk". Có nhánh 4.9, và có thân cây, là một nhánh khác. Việc sửa chữa đã được thực hiện cho thân cây. Trường mục tiêu mốc trong báo cáo lỗi nói rằng nó sẽ được trong GCC 5.0 –
@JonathanWakely cuối cùng đã nhận nó :) – vsoftco