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