#include <iostream>
#include <vector>
#include <fstream>

using namespace std;
bool FileIsProvided() { return true; }

int main(int argc, char* argv[])
{
	vector<string> args{argv+1, argv + argc};
	istream& refToCIN  ( cin );                // This is OK
	const istream& refToFile = ifstream(args[1]);    // This is OK
 
	istream& inStream ( FileIsProvided()? ifstream(args[1]) : cin );
	// This causes error:
	// std::basic_istream<char,std::char_traits<char>>::basic_istream' : 
	// cannot access protected member declared in class std::basic_istream<char,std::char_traits<char>>
 
	// ProcessStream(inStream); // This could either be a file or cin
	return 0;
}