Will try to use std::optional when available. Also using allocator_traits::is_always_equal support.
BOOST_HAS_PRAGMA_ONCE