Optional references are in themselves a good idea; they're specifically mentioned as such in the recent paper n3527, intended for standardisation as a library component in C++14. They're supported in Boost.Optional.
The problem with your code is that you're trying to bind a non-const optional reference to a const lvalue; if you change boost::optional< action_t& >
to boost::optional< const action_t& >
it should compile fine.