Khi biên dịch ví dụ sau đây trong MSVC, tôi nhận đượcHành vi của tên đủ điều kiện sử dụng thừa kế riêng
'Giao diện' không thể truy cập bởi vì sử dụng 'cơ sở' 'tư nhân' để kế thừa từ 'Giao diện'
trong dòng được đánh dấu bằng Error
. Khi cuộc gọi đến foo
đủ điều kiện với bí danh loại cùng loại, nó hoạt động. Tôi đã thử nghiệm với msvc và ideone.
Tại sao hai cuộc gọi không bằng nhau?
struct Interface {};
template<class T>
struct Base : private T
{
void foo() {}
};
using BaseX = Base<Interface>;
class Derived : Base<Interface>
{
Derived() {
Base<Interface>::foo(); // Error
BaseX::foo(); // Works
}
};
Trông giống như lỗi msvc –
@ DieterLücking, tôi đã thử sử dụng g ++ 4.9.3 và 'BaseX :: foo();' hoạt động. –