В следующей полной программе:
#include <vector>
class Derived : private std::vector<int> {
public:
void f();
};
void Derived::f() {
Derived d;
d.std::vector<int>::push_back(0);
}
int main() {
Derived d;
d.f();
}
линия
d.std::vector<int>::push_back(0);
можно заменить на
d.vector<int>::push_back(0);
и компиляция будет завершена без предупреждения как в gcc 7, так и в clang 6.
Я не понимаю, почему часть std::
разрешения области действия является необязательной, поскольку нет объявления using namespace std
.