Tôi đang phải vật lộn với những gì dường như là một sự mơ hồ trong C++ độ phân giải 11 biểu tượng do việc thực hiện tiêu chuẩn thư viện GNU trong môi trường này:C++ 11 thành viên danh sách khởi sự nhập nhằng
- Arch Linux 4.2.5 -1 (x86_64)
- g ++ 5.2.0
- kêu vang ++ 3.7.0
Ví dụ:
#include <iostream>
#include <string>
struct version {
unsigned major;
unsigned minor;
unsigned patch;
version(unsigned major, unsigned minor, unsigned patch) :
major(major), minor(minor), patch(patch) { }
friend std::ostream & operator<<(std::ostream & out, version const& v) {
out << v.major << ".";
out << v.minor << ".";
out << v.patch;
return out;
}
};
int main(int argc, char ** argv) {
version v(1, 1, 0);
std::cout << v << std::endl;
return 0;
}
biên dịch báo lỗi:
error: member initializer 'gnu_dev_major' does not name a non-static data
member or base class
error: member initializer 'gnu_dev_minor' does not name a non-static data
member or base class
Command:
clang++ -std=c++11 -o test *.cpp
Phạm vi điều hành giải quyết không xuất hiện để được áp dụng trong danh sách khởi tạo thành viên vì vậy tôi không thể tìm ra cách để giải quyết sự mơ hồ. Mẫu này biên dịch tốt mà không có cờ C++ 11.
Nó cũng biên dịch tốt với MSVC 2015 –
Vấn đề tương tự tìm thấy ở đây [macro lớn và nhỏ quy định tại sys/sysmacros.h kéo bằng] (http://stackoverflow.com/questions/22240973/major-and- nhỏ-macros-được định nghĩa-in-sys-sysmacros-h-kéo-in-by-iterator) –
@ Myria chúng là các macro được xác định bởi gcc – bolov