When I try to compile the code
istream in; if (argc==1) in=cin; else { ifstream ifn(argv[1]); in=ifn; }
gcc fails,
You could use a pointer for in, e.g.:
in
istream *in; ifstream ifn; if (argc==1) { in=&cin; } else { ifn.open(argv[1]); in=&ifn; }