You could use boost::spirit::hold_any
instead. It’s defined here:
#include <boost/spirit/home/support/detail/hold_any.hpp>
and is fully compatible with boost::any
. This class has two differences if compared to boost::any
:
- it utilizes the small object optimization idiom and a couple of other optimization tricks, making
spirit::hold_any
smaller and faster thanboost::any
- it has the streaming operators (
operator<<()
andoperator>>()
) defined, allowing to input and output aspirit::hold_any
seemlessly.
The only limitation is that you can’t input into an empty spirit::hold_any
, but it needs to be holding a (possibly default constructed) instance of the type which is expected from the input.