Can you please explain why this construct works:
typedef boost::make_recursive_variant<
boost::blank,
std::string,
std::vector< std::string >,
std::vector< int32_t >,
std::vector< int64_t >,
std::vector< double >,
std::vector< std::complex<double> >,
std::map< std::string, boost::recursive_variant_ >
>::type Variant;
And this doesn't:
typedef boost::make_recursive_variant<
boost::blank,
std::string,
std::vector< std::string >,
std::vector< int32_t >,
std::vector< int64_t >,
std::vector< double >,
std::vector< std::complex<double> >,
std::unordered_map< std::string, boost::recursive_variant_ >
>::type Variant;
Unfortunately, I can't comprehend error message. It says something about
static int initialize(void* dest, param_T operand)
^
/usr/include/boost/variant/detail/initializer.hpp:104:24: note: no known conversion for argument 2 from ‘const std::unordered_map<std::__cxx11::basic_string<char>, boost::variant<boost::detail::variant::recursive_flag<boost::blank>,
//Skipped
to ‘boost::detail::variant::make_initializer_node::apply<boost::mpl::pair<boost::detail::variant::make_initializer_node::apply<boost::mpl::pair<boost::detail::variant::make_initializer_node::apply<boost::mpl::pair<boost::detail::variant::make_initializer_node::apply<boost::mpl::pair<boost::detail::variant::make_initializer_node::apply<boost::mpl::pair<boost::detail::variant::make_initializer_node::apply<boost::mpl::pair<boost::detail::variant::make_initializer_node::apply<boost::mpl::pair<boost::detail::variant::initializer_root, mpl_::int_<0> >, boost::mpl::l_iter<boost::mpl::l_item<mpl_::long_<8l>,
Ubuntu 16.04, gcc 5.4.0 20160609, boost 1.58.