Ответ 1
Хотя доступность и удаление ортогональны, трудно понять, как может быть практическое различие в том случае, если вы предлагаете.
Если тип имеет исключенный элемент по умолчанию, имеет ли значение, доступность которого имеет объявление?
class FooA {
public:
FooA() = delete;
FooA(FooA const&) = delete;
FooA& operator=(FooA const&) = delete;
}
class FooB {
private:
FooB() = delete;
FooB(FooB const&) = delete;
FooB& operator=(FooB const&) = delete;
}
class FooC {
protected:
FooC() = delete;
FooC(FooC const&) = delete;
FooC& operator=(FooC const&) = delete;
}
Хотя доступность и удаление ортогональны, трудно понять, как может быть практическое различие в том случае, если вы предлагаете.
Возможно, это искусственно, но это немного отличается
class FooA {
private:
FooA& operator=(FooA const&) = delete;
};
class FooB : FooA {
// ill-formed because FooB has no access
using FooA::operator=;
};
Является ли это практическим различием... Я действительно не знаю. Если FooA
является параметром шаблона, и вы говорите using T::BazBang
, это может произойти на практике.