//Purpose: // Test whether CRTP can be used with variant // to avoid need for make_recursive_variant. // #include "libs/io/filters/src/mout.cpp" #define UTILITY_OBJECT_TRACKED_SET_OF_OBJECTS_TRACE_MODE #define UTILITY_OBJECT_TRACKED_TRACE_MODE #include "libs/utility/src/obj_id.cpp" #include "libs/utility/src/object_tracked.cpp" #include "boost/utility/trace_scope.hpp" //delimit_macro_test_code #if 0 #include #else #include "variant.hpp" #endif using namespace boost; template < class A > struct vlist_empty {}; template < class A > struct vlist : variant < vlist_empty , std::pair < A , vlist* > > { variant < vlist_empty , std::pair < A , vlist* > > super_type ; vlist(void) { utility::trace_scope ts("vlist(void)"); mout()<<"id="<id_get()<<"\n"; } template < class T > vlist(T a_t) : super_type(a_t) { utility::trace_scope ts("templatevlist(T)"); mout()<<"id="<id_get()<<"\n"; mout()<<"T.first="<which="<which()<<"\n"; } }; void test_list(void) { typedef vlist list_type; #if 0 list_type int_list_empty; mout()<<"int_list_empty.which()="< pair_type; list_type*tail=0;//&int_list_empty; pair_type cp1(1,tail); { utility::trace_scope ts("int_list_1 scope"); list_type int_list_1(cp1); mout()<<"int_list_1.which()="<(int_list_1); mout()<<"head="<