usage of boost::variant