từ temp.local:ẩn của mẫu tham số của thành viên mẫu
Trong định nghĩa của một thành viên của một lớp mẫu xuất hiện bên ngoài của lớp mẫu định nghĩa, tên của một thành viên của lớp mẫu da tên của tham số mẫu của bất kỳ lớp nào kèm theo mẫu (nhưng không phải là thông số mẫu của thành viên nếu thành viên là một lớp hoặc mẫu chức năng). [Ví dụ:
template<class T> struct A { struct B { /* ... */ }; typedef void C; void f(); template<class U> void g(U); }; template<class B> void A<B>::f() { B b; // A's B, not the template parameter } template<class B> template<class C> void A<B>::g(C) { B b; // A's B, not the template parameter C c; // the template parameter C, not A's C }
- end dụ]
vấn đề là, mỗi trình biên dịch, mà tôi đã cố gắng (g ++, vc, icc, kêu vang), đối xử với C trong A<B>::g(C)
như thành viên của một và không biên dịch ví dụ đó.
Đây có phải là lỗi phổ biến không?
Vâng, cho rằng "mỗi trình biên dịch" mà bạn đã thử làm điều đó, tôi không thể nghĩ ra bất kỳ định nghĩa nào tốt hơn về "phổ biến". Đó là một lý lẽ khá thuyết phục để mô tả đây là lỗi trình biên dịch "phổ biến". –
i có nghĩa là "phổ biến đối với tất cả các trình biên dịch, mà tôi đã thử". –
Không có nhiều trình biên dịch C++ xung quanh. Có vẻ như bạn đã đặt tên cho họ rất nhiều. Họ không chính xác phát triển trên cây, bạn biết ... Đó là an toàn để bỏ qua trình biên dịch lịch sử ... –