Allocators might be final so do not derive from them unconditionally. Instead of deriving from Allocator, derive from a facility like boost::empty_value<Allocator> (which will use inheritance if not final, or otherwise just store a member).
Fixed in 5e5c939303ad69c6db9451caa17fe37e45cc476a.
I am using boost::empty_value when building against Boost 1.70 or newer, and copied much of your implementation for building against earlier versions of Boost.
From #35
About
small_union