
The attached code attempts to use CRTP (Curiously Recurring Template Pattern) to see if recursive_variant can be avoided; however, I'm getting 2 variant's produced instead of 1 and the which gives the wrong result. The output is: <-- cut here -- /home/evansl/prog_dev/boost-svn/ro/boost-trunk/sandbox/build/gcc4_1/lje/libs/variant/test/crtp_test.exe set_of_objects_tracked+ ===>Enter:int_list_1 scope object_tracked+:id=1:default ===>Enter:variant() /home/evansl/prog_dev/boost-svn/ro/boost-trunk/sandbox/lje/libs/variant/test/variant.hpp:1176:id=1 ===>Exit:variant() object_tracked+:id=2:default ===>Enter:template<typename T>variant(T& operand) /home/evansl/prog_dev/boost-svn/ro/boost-trunk/sandbox/lje/libs/variant/test/variant.hpp:1360:id=2 ===>Enter:template<typename T>convert_construct(T& operand,int,false) /home/evansl/prog_dev/boost-svn/ro/boost-trunk/sandbox/lje/libs/variant/test/variant.hpp:1268 /home/evansl/prog_dev/boost-svn/ro/boost-trunk/sandbox/lje/libs/variant/test/initializer.hpp:95:index=1 /home/evansl/prog_dev/boost-svn/ro/boost-trunk/sandbox/lje/libs/variant/test/variant.hpp:1280:after initialize:which=1 ===>Exit:template<typename T>convert_construct(T& operand,int,false) /home/evansl/prog_dev/boost-svn/ro/boost-trunk/sandbox/lje/libs/variant/test/variant.hpp:1362:after_convert_construct:which=1 ===>Exit:template<typename T>variant(T& operand) ===>Enter:template<class T>vlist(T) id=1 T.first=1 this->which=0 ===>Exit:template<class T>vlist(T) int_list_1.which()=0 object_tracked-:id=2:am_i_live=1 object_tracked-:id=1:am_i_live=1 ===>Exit:int_list_1 scope set_of_objects_tracked-
-- cut here -- The output produced from just the attached includes:
this->which=0 but I expected which=1 since the CTOR arg is the 2nd bounded type: (pair<int,list_type*>). The other output's are produced by making object_tracked a super of variant and also putting debug prints in various CTOR's. The output: ===>Enter:variant() /home/evansl/prog_dev/boost-svn/ro/boost-trunk/sandbox/lje/libs/variant/test/variant.hpp:1176:id=1 ===>Exit:variant() indicates a variant produced with the default CTOR has id=1 which is the id of the vlist produced with the pair CTOR arg. Does anyone have any clue why this is happening, IOW why which=0 instead of 1. I tried using the debugger, but it was not more help. TIA. -regards, Larry