fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Test2;
  6.  
  7. class Test1
  8. {
  9. public:
  10. Test1(){}
  11. operator Test2();
  12. };
  13.  
  14. class Test2
  15. {
  16. public:
  17. Test2(){}
  18. Test1 operator[] (const Test2& test2){ return Test1(); }
  19. friend ostream& operator << (ostream& os, const Test2& test2){ return os; } // not Ok
  20. };
  21.  
  22. Test1::operator Test2(){ return Test2(); }
  23.  
  24. int main()
  25. {
  26. Test2 test2_1, test2_2;
  27. cout << test2_1[test2_2] << endl;
  28. return 0;
  29. }
Compilation error #stdin compilation error #stdout 0s 3460KB
stdin
Standard input is empty
compilation info
prog.cpp:27:7: error: invalid operands to binary expression ('ostream' (aka 'basic_ostream<char>') and 'Test1')
        cout << test2_1[test2_2] << endl;
        ~~~~ ^  ~~~~~~~~~~~~~~~~
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:108:7: note: candidate function not viable: no known conversion from 'Test1' to '__ostream_type &(*)(__ostream_type &)' for 1st argument
      operator<<(__ostream_type& (*__pf)(__ostream_type&))
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:117:7: note: candidate function not viable: no known conversion from 'Test1' to '__ios_type &(*)(__ios_type &)' for 1st argument
      operator<<(__ios_type& (*__pf)(__ios_type&))
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:127:7: note: candidate function not viable: no known conversion from 'Test1' to 'std::ios_base &(*)(std::ios_base &)' for 1st argument
      operator<<(ios_base& (*__pf) (ios_base&))
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:166:7: note: candidate function not viable: no known conversion from 'Test1' to 'long' for 1st argument
      operator<<(long __n)
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:170:7: note: candidate function not viable: no known conversion from 'Test1' to 'unsigned long' for 1st argument
      operator<<(unsigned long __n)
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:174:7: note: candidate function not viable: no known conversion from 'Test1' to 'bool' for 1st argument
      operator<<(bool __n)
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:178:7: note: candidate function not viable: no known conversion from 'Test1' to 'short' for 1st argument
      operator<<(short __n);
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:181:7: note: candidate function not viable: no known conversion from 'Test1' to 'unsigned short' for 1st argument
      operator<<(unsigned short __n)
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:189:7: note: candidate function not viable: no known conversion from 'Test1' to 'int' for 1st argument
      operator<<(int __n);
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:192:7: note: candidate function not viable: no known conversion from 'Test1' to 'unsigned int' for 1st argument
      operator<<(unsigned int __n)
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:201:7: note: candidate function not viable: no known conversion from 'Test1' to 'long long' for 1st argument
      operator<<(long long __n)
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:205:7: note: candidate function not viable: no known conversion from 'Test1' to 'unsigned long long' for 1st argument
      operator<<(unsigned long long __n)
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:220:7: note: candidate function not viable: no known conversion from 'Test1' to 'double' for 1st argument
      operator<<(double __f)
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:224:7: note: candidate function not viable: no known conversion from 'Test1' to 'float' for 1st argument
      operator<<(float __f)
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:232:7: note: candidate function not viable: no known conversion from 'Test1' to 'long double' for 1st argument
      operator<<(long double __f)
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:245:7: note: candidate function not viable: no known conversion from 'Test1' to 'const void *' for 1st argument
      operator<<(const void* __p)
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:270:7: note: candidate function not viable: no known conversion from 'Test1' to '__streambuf_type *' (aka 'basic_streambuf<char, std::char_traits<char> > *') for 1st argument
      operator<<(__streambuf_type* __sb);
      ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:476:5: note: candidate function [with _CharT = char, _Traits = std::char_traits<char>] not viable: no known conversion from 'Test1' to 'char' for 2nd argument
    operator<<(basic_ostream<_CharT, _Traits>& __out, char __c)
    ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:482:5: note: candidate function [with _Traits = std::char_traits<char>] not viable: no known conversion from 'Test1' to 'char' for 2nd argument
    operator<<(basic_ostream<char, _Traits>& __out, char __c)
    ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:488:5: note: candidate function [with _Traits = std::char_traits<char>] not viable: no known conversion from 'Test1' to 'signed char' for 2nd argument
    operator<<(basic_ostream<char, _Traits>& __out, signed char __c)
    ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:493:5: note: candidate function [with _Traits = std::char_traits<char>] not viable: no known conversion from 'Test1' to 'unsigned char' for 2nd argument
    operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)
    ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:530:5: note: candidate function [with _Traits = std::char_traits<char>] not viable: no known conversion from 'Test1' to 'const char *' for 2nd argument
    operator<<(basic_ostream<char, _Traits>& __out, const char* __s)
    ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:543:5: note: candidate function [with _Traits = std::char_traits<char>] not viable: no known conversion from 'Test1' to 'const signed char *' for 2nd argument
    operator<<(basic_ostream<char, _Traits>& __out, const signed char* __s)
    ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:548:5: note: candidate function [with _Traits = std::char_traits<char>] not viable: no known conversion from 'Test1' to 'const unsigned char *' for 2nd argument
    operator<<(basic_ostream<char, _Traits>& __out, const unsigned char* __s)
    ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/bits/ostream.tcc:321:5: note: candidate function [with _CharT = char, _Traits = std::char_traits<char>] not viable: no known conversion from 'Test1' to 'const char *' for 2nd argument
    operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s)
    ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:471:5: note: candidate template ignored: deduced conflicting types for parameter '_CharT' ('char' vs. 'Test1')
    operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c)
    ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/bits/basic_string.h:2772:5: note: candidate template ignored: could not match 'basic_string<type-parameter-0-0, type-parameter-0-1, type-parameter-0-2>' against 'Test1'
    operator<<(basic_ostream<_CharT, _Traits>& __os,
    ^
/usr/bin/../lib/gcc/i586-linux-gnu/4.9/../../../../include/c++/4.9/ostream:513:5: note: candidate template ignored: could not match 'const _CharT *' against 'Test1'
    operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s)
    ^
1 error generated.
stdout
Standard output is empty