Xem xét chương trình sau đây. Nó có được hình thành tốt hay không theo tiêu chuẩn C++ (tham chiếu đến các phần liên quan của tiêu chuẩn cần thiết):Cố gắng xác định thành viên không gian tên thông qua sử dụng khai báo
namespace X { extern int i; }
namespace N { using X::i; }
int N::i = 1;
int main() {}
Tôi nhận được kết quả khác nhau cho các trình biên dịch khác nhau. Tôi đang cố gắng tìm ra những gì trình biên dịch tôi nên nộp một báo cáo lỗi cho:
Clang: Cung cấp cho các lỗi biên dịch sau đây: Không có thành viên mang tên 'i' trong không gian tên 'N'
GCC và Visual C++ biên dịch nó mà không có lỗi.
Để so sánh sau đây cho lỗi biên dịch với tất cả ba trình biên dịch:
namespace X { void f(); }
namespace N { using X::f; }
void N::f() {};
int main() {}
Hài hước, VS2013 biên dịch, nhưng IntelliSence nói '" Lỗi: không gian tên "N" không có thành viên thực tế "i" ' – AlexD
Tôi nghĩ câu trả lời là ở đây: [link] (http://stackoverflow.com/questions/6175705/Phạm vi-of-sử dụng-khai báo-trong-một không gian tên) – Jorj
@Supremum Bạn có thể nhận được bản sao của riêng bạn của tiêu chuẩn C++ để đọc tại https://isocpp.org/std/the-standard. – Coder