#include #include struct Visitor : public boost::static_visitor> { template std::unique_ptr operator()(T& operand) { return std::unique_ptr(new int(5)); } }; int main() { boost::variant a = int(5); boost::apply_visitor(Visitor(),a); // this doesn't compile }