Consider the following text:
[C++11: 12.4/11]:Destructors are invoked implicitly
- for constructed objects with static
Accessibility is orthogonal to deletedness:
[C++11: 11.2/1]:If a class is declared to be a base class (Clause 10) for another class using thepublicaccess specifier, thepublicmembers of the base class are accessible aspublicmembers of the derived class andprotectedmembers of the base class are accessible asprotectedmembers of the derived class. If a class is declared to be a base class for another class using theprotectedaccess specifier, thepublicandprotectedmembers of the base class are accessible asprotectedmembers of the derived class. If a class is declared to be a base class for another class using theprivateaccess specifier, thepublicandprotectedmembers of the base class are accessible asprivatemembers of the derived class.
There is this:
[C++11: 8.4.3/2]:A program that refers to a deleted function implicitly or explicitly, other than to declare it, is ill-formed. [ Note: This includes calling the function implicitly or explicitly and forming a pointer or pointer-to-member to the function. It applies even for references in expressions that are not potentially-evaluated. If a function is overloaded, it is referenced only if the function is selected by overload resolution. —end note ]
But you never "refer to" the deleted destructor.
(I still can't explain why the inheritance example doesn't compile.)