A class type 
T is 
hazard-protectable
if it has exactly one base class of type 
hazard_pointer_obj_base<T, D>
for some 
D,
that base is public and non-virtual, and
it has no base classes of type 
hazard_pointer_obj_base<T2, D2>
for any other combination 
T2, 
D2.