// PRMS Id: 4257
// Bug: g++ ignores non-member possibilities (ideal_candidate_ansi bug)
// Build don't link:

class ostream 
{
public:
#ifdef EITHER_ONE_A
    ostream& operator<<(unsigned long n);
    ostream& operator<<(long n);
#else
    ostream& operator<<(short n);
    ostream& operator<<(unsigned short n);
#endif
};

class ccObjectInfo {};

ostream& operator << (ostream& out, const ccObjectInfo& obj);

class ccString : public ccObjectInfo
{
#ifdef EITHER_ONE_B
    operator int		() const;
#else
    operator long   		() const;
#endif
};

// Should pick this one!!
ostream& operator << (ostream& o, const ccString & s);

extern ostream cout;

void f ()
{
    ccString foo;
    cout << foo;
}
