//Purpose: // Prototype d version of boost::mpl::set // class bool_ ( bool TrueFalse ) { } class set ( ) { } class set ( Head , Tail... ) : set!(Tail) //needed if specialization of has_key_tester to work. { } bool_!(true) has_key_tester ( Head , Tail... ) /*Modelled after * void print(T, A...)(T t, A a) *at http://www.digitalmars.com/d/variadic-function-templates.html */ ( set!(Head,Tail) ) { return new bool_!(true); } bool_!(false) has_key_tester ( Head ) ( set!() ) { return new bool_!(false); } class not_member {} void test() { auto set_int_float=new set!(int,float); auto set_empty=new set!(); set_empty=set_int_float;//check that set_empty is superset of set_int_float { bool_!(true) result=has_key_tester!(int)(set_int_float); } { bool_!(false) result=has_key_tester!(not_member)(set_empty); } { bool_!(false) result=has_key_tester!(not_member)(set_int_float); } }