#include #include #include namespace boost { //The following code is modelled after that shown here: // // http://www.boost.org/doc/libs/1_43_0/doc/html/variant/tutorial.html#variant.tutorial.recursive // //IOW: // // expression in tutorial corresponds to maybe_tree here. // binary_op in tutorial corresponds to tuple_tree here. // // struct null_tree{}; struct tuple_tree ; typedef variant < null_tree , recursive_wrapper < tuple_tree > > maybe_tree ; struct tuple_tree : tuple < int , std::vector > { }; }//exit boost namespace using namespace boost; #include int main(void) { maybe_tree mt; std::cout<<"&maybe_tree="<(&mt)<<"\n"; null_tree& nt=get(mt); mt = tuple_tree(); tuple_tree& tt=get(mt); std::cout<<"&null_tree="<(&nt)<<"\n"; std::cout<<"&tuple_tree="<(&tt)<<"\n"; //the following should throw a 'boost::bad_get' exception: null_tree& et=get(mt); std::cout<<"&err_tree="<(&et)<<"\n"; return 0; }