If a class has indirect private virtual base with non-trivial public destructor, a class cannot access its virtual base's destructor. Example code: struct A { ~A(){} }; struct B: virtual private A { ~B() {} }; struct C: public B { ~C() {} }; Result: prog.cc:11:8: error: inherited virtual base class 'A' has private destructor struct C: public B ^ prog.cc:6:11: note: declared private here struct B: virtual private A GCC accept this code. Clang until 3.3 accept this code. Clang 3.4 and later reject this code.
This is probably an intended behavior after r183462 to fix DR7. https://llvm.googlesource.com/clang/+/585bee48bac063f31696e308798f9432b5ba4116 http://www.open-std.org/Jtc1/sc22/wg21/docs/cwg_closed.html#7