fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6. bool FileIsProvided() { return true; }
  7.  
  8. int main(int argc, char* argv[])
  9. {
  10. vector<string> args{argv+1, argv + argc};
  11. istream& refToCIN ( cin ); // This is OK
  12. const istream& refToFile = ifstream(args[1]); // This is OK
  13.  
  14. istream& inStream ( FileIsProvided()? ifstream(args[1]) : cin );
  15. // This causes error:
  16. // std::basic_istream<char,std::char_traits<char>>::basic_istream' :
  17. // cannot access protected member declared in class std::basic_istream<char,std::char_traits<char>>
  18.  
  19. // ProcessStream(inStream); // This could either be a file or cin
  20. return 0;
  21. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
In file included from /usr/include/c++/5/iostream:40:0,
                 from prog.cpp:1:
/usr/include/c++/5/istream: In function 'int main(int, char**)':
/usr/include/c++/5/istream:613:7: error: 'std::basic_istream<_CharT, _Traits>::basic_istream(std::basic_istream<_CharT, _Traits>&&) [with _CharT = char; _Traits = std::char_traits<char>]' is protected
       basic_istream(basic_istream&& __rhs)
       ^
prog.cpp:14:60: error: within this context
  istream& inStream ( FileIsProvided()? ifstream(args[1]) : cin );
                                                            ^
In file included from /usr/include/c++/5/iostream:40:0,
                 from prog.cpp:1:
/usr/include/c++/5/istream:611:7: error: 'std::basic_istream<_CharT, _Traits>::basic_istream(const std::basic_istream<_CharT, _Traits>&) [with _CharT = char; _Traits = std::char_traits<char>]' is protected
       basic_istream(const basic_istream&) = delete;
       ^
prog.cpp:14:60: error: within this context
  istream& inStream ( FileIsProvided()? ifstream(args[1]) : cin );
                                                            ^
prog.cpp:14:60: error: use of deleted function 'std::basic_istream<_CharT, _Traits>::basic_istream(const std::basic_istream<_CharT, _Traits>&) [with _CharT = char; _Traits = std::char_traits<char>]'
In file included from /usr/include/c++/5/iostream:40:0,
                 from prog.cpp:1:
/usr/include/c++/5/istream:611:7: note: declared here
       basic_istream(const basic_istream&) = delete;
       ^
prog.cpp:14:64: error: invalid initialization of non-const reference of type 'std::istream& {aka std::basic_istream<char>&}' from an rvalue of type 'std::basic_istream<char>'
  istream& inStream ( FileIsProvided()? ifstream(args[1]) : cin );
                                                                ^
stdout
Standard output is empty