CharT_pointer.pass.cpp revision 73d21a4f0774d3fadab98e690619a359cfb160a3
18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt//===----------------------------------------------------------------------===// 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// The LLVM Compiler Infrastructure 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// 5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt// This file is distributed under the University of Illinois Open Source 6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt// License. See LICENSE.TXT for details. 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt//===----------------------------------------------------------------------===// 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// <ostream> 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// template <class charT, class traits = char_traits<charT> > 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// class basic_ostream; 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// template <class charT, class traits, class T> 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// basic_ostream<charT, traits>& 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// operator<<(basic_ostream<charT, traits>&& os, const T& x); 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include <ostream> 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include <cassert> 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttemplate <class CharT> 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass testbuf 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt : public std::basic_streambuf<CharT> 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt typedef std::basic_streambuf<CharT> base; 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt std::basic_string<CharT> str_; 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtpublic: 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt testbuf() 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt { 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt std::basic_string<CharT> str() const 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt {return std::basic_string<CharT>(base::pbase(), base::pptr());} 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtprotected: 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt virtual typename base::int_type 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt overflow(typename base::int_type __c = base::traits_type::eof()) 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt { 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (__c != base::traits_type::eof()) 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt { 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int n = str_.size(); 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt str_.push_back(__c); 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt str_.resize(str_.capacity()); 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt base::setp(const_cast<CharT*>(str_.data()), 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const_cast<CharT*>(str_.data() + str_.size())); 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt base::pbump(n+1); 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return __c; 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint main() 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt { 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt testbuf<char> sb; 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt std::ostream(&sb) << "testing..."; 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt assert(sb.str() == "testing..."); 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt { 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt testbuf<wchar_t> sb; 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt std::wostream(&sb) << L"123"; 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt assert(sb.str() == L"123"); 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt