------- Comment #18 from aburger at cea dot fr  2005-12-14 19:16 -------
This does not compile, and it is much simpler than ostr(ing)stream:

class A {
public:
    int a;
    A() : a(0) {}
    A& operator<<(int aa) { return *this; }
};

A& operator<<(A& thys, A& (*f)(A&))
{ return f(thys); }

A& tic(A& a)
{ return a; }

int main()
{
    A()    << 12 << tic; // ok
    A a; a << tic << 12; // ok
    //A()    << tic << 12; // does not compile:
#if 0
err.cxx:28: invalid conversion from 'A&(*)(A&)' to 'int'
err.cxx:28:   initializing argument 1 of 'A& A::operator<<(int)'
#endif
}

#if 0
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2.3/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --enable-shared --enable-threads=posix
--disable-checking --with-system-zlib --enable-__cxa_atexit
--host=i386-redhat-linux
Thread model: posix
gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-53)
#endif


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9925

Reply via email to