
Ok, a solution finally! I figured that my use of make_recursive_variant and recursive_variant_ was probably at fault as the variant in question is reasonably large, the two recursive types effectively trebled the size of its type description. My solution instead was to use the recursive_wrapper as I show below. It does work slightly differently, specifically you have to reference the member vector or map and I am worried that I'm walking close to a dangerous edge which ICE's could start happening again but the other option is to write my own object hierarchy based solution which would be much cruder. Thanks Yan and Moshe for your suggestions I very much appreciate you taking the time to think about this error. Kind regards, Eoin. struct param_vec; struct param_map; typedef boost::variant< int , std::string, boost::posix_time::ptime, boost::recursive_wrapper<param_vec>, boost::recursive_wrapper<param_map> > param; struct param_vec { param_vec() {} param_vec(std::vector<param> vec) : v(vec) {} std::vector<param> v; }; struct param_map { param_map() {} param_map(std::map<std::string, param> map) : m(map) {} std::map<std::string, param> m; };