blob: d2d9173b21989d64717bc15cb8f63d820f305bfb [file] [log] [blame]
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// Written by Hemant Pande, Rutgers University. December 1994. May be
// distributed freely, provided this comment is displayed at the top.
// %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#include <cstdio>
class True {
public:
True() {}
virtual True *and_m (True *arg)
{
printf("T\n");
return arg;
}
} tru;
class False : public True {
public:
False() {}
True *and_m (True *arg);
} fals;
True *False::and_m (True *arg)
{
printf("F\n");
return &fals;
}
True *v1, *nv1, *v2, *nv2, *v3, *nv3;
True *c;
int main(int argc, char **argv) {
if (0) {v1 = &tru; nv1 = &fals;} else {v1 = &fals; nv1= &tru;}
if (0) {v2 = &tru; nv2 = &fals;} else {v2 = &fals; nv2 = &tru;}
if (0) {v3 = &tru; nv3 = &fals;} else {v3 = &fals; nv3 = &tru;}
if (0) c = nv2; else if (0) c = v1; else c = v2;
if (0) c = c->and_m(nv3); else if (0) c = c->and_m(nv2); else c = c->and_m(v1);
if (0) c = c->and_m(v2); else if (0) c = c->and_m(nv1); else c = c->and_m(v3);
}