#include <ctime>
#include <iostream>
#include <sstream>
#include <string>
#include <iomanip>
#include <utility>
struct make_string
{
template < typename T>
make_string & operator<< ( T && t)
{
ostr << std:: forward < T> ( t) ;
return * this ;
}
operator std:: string ( ) const { return ostr.str ( ) ; }
std:: string str( ) const { return ostr.str ( ) ; }
std:: ostringstream ostr;
} ;
void message( const std:: string & ) { }
int main( )
{
message( make_string( ) << "1 + 1 = " << 2 << "\n " ) ; // OK
message( make_string( ) << "1 + 1 = " << 2 << std:: endl ) ; // Not OK
// OK
std:: ostringstream os;
os << std:: endl ;
// Not ok.
make_string mk;
mk << std:: endl ;
}
I2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxzc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPHV0aWxpdHk+CgpzdHJ1Y3QgbWFrZV9zdHJpbmcKewogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICBtYWtlX3N0cmluZyAmIG9wZXJhdG9yPDwoVCAmJiB0KQogICAgewogICAgICAgIG9zdHIgPDwgc3RkOjpmb3J3YXJkPFQ+KHQpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBvcGVyYXRvciBzdGQ6OnN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG9zdHIuc3RyKCk7IH0KCiAgICBzdGQ6OnN0cmluZyBzdHIoKSBjb25zdCB7IHJldHVybiBvc3RyLnN0cigpOyB9CiAgICAKICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvc3RyOwp9OwoKCnZvaWQgbWVzc2FnZShjb25zdCBzdGQ6OnN0cmluZyYpIHt9CgppbnQgbWFpbigpCnsKICAgIG1lc3NhZ2UobWFrZV9zdHJpbmcoKSA8PCAiMSArIDEgPSAiIDw8IDIgPDwgIlxuIik7IC8vIE9LCiAgICBtZXNzYWdlKG1ha2Vfc3RyaW5nKCkgPDwgIjEgKyAxID0gIiA8PCAyIDw8IHN0ZDo6ZW5kbCk7IC8vIE5vdCBPSwogICAgCiAgICAKICAgIC8vIE9LCiAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gb3M7CiAgICBvcyA8PCBzdGQ6OmVuZGw7CiAgICAKICAgIC8vIE5vdCBvay4KICAgIG1ha2Vfc3RyaW5nIG1rOwogICAgbWsgPDwgc3RkOjplbmRsOwp9
compilation info
prog.cpp: In function 'int main()':
prog.cpp:30:54: error: no match for 'operator<<' in '((make_string*)make_string().make_string::operator<< [with T = const char (&)[9], make_string = make_string](((const char (&)[9])"1 + 1 = ")))->make_string::operator<< [with T = int, make_string = make_string](((int&&)(&2))) << std::endl'
prog.cpp:39:16: error: no match for 'operator<<' in 'mk << std::endl'
stdout