// Demonstration of apply_visitor failing to compile with move-only return type //clang++ -I/opt/local/include --std=c++11 main.cpp -o main #include #include struct test : boost::static_visitor > { std::unique_ptr operator()(int) const { return std::unique_ptr(new bool(true)); } std::unique_ptr operator()(double) const { return std::unique_ptr(new bool(false)); } }; int main(){ boost::variant vdata{2.0}; std::unique_ptr result = boost::apply_visitor(test(), vdata); return 0; }