// { dg-lto-do compile } extern "C" { extern long unsigned int strlen (__const char *__s); } class Cstring { }; class Foobar_Out { virtual void put_to_buf (const char *str, long unsigned int msg_len); void put_to_buf (const char *str) { put_to_buf (str, strlen (str)); } Foobar_Out & operator << (const char *str); Foobar_Out & operator << (const Cstring & cstring); }; class Foobar_Log:public Foobar_Out { Foobar_Log (int channel); virtual void put_to_buf (const char *str, long unsigned int msg_len); }; Foobar_Out & Foobar_Out::operator << (const char *str) { put_to_buf (str); } Foobar_Out & Foobar_Out::operator << (const Cstring & cstring) { return *this; } Foobar_Log::Foobar_Log (int ch) { }