signed_char.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Source Licenses. See LICENSE.TXT for details.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <istream>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// template<class traits>
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   basic_istream<char,traits>& operator>>(basic_istream<char,traits>&& in, signed char& c);
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <istream>
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <cassert>
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)template <class CharT>
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct testbuf
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : public std::basic_streambuf<CharT>
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    typedef std::basic_string<CharT> string_type;
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    typedef std::basic_streambuf<CharT> base;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)private:
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    string_type str_;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public:
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    testbuf() {}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    testbuf(const string_type& str)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        : str_(str)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::setg(const_cast<CharT*>(str_.data()),
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   const_cast<CharT*>(str_.data()),
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   const_cast<CharT*>(str_.data()) + str_.size());
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CharT* eback() const {return base::eback();}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CharT* gptr() const {return base::gptr();}
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CharT* egptr() const {return base::egptr();}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main()
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    {
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        testbuf<char> sb("          ");
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        std::istream is(&sb);
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        signed char c = 'z';
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        is >> c;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert( is.eof());
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert( is.fail());
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(c == 'z');
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
53    {
54        testbuf<char> sb("   abcdefghijk    ");
55        std::istream is(&sb);
56        signed char c;
57        is >> c;
58        assert(!is.eof());
59        assert(!is.fail());
60        assert(c == 'a');
61        is >> c;
62        assert(!is.eof());
63        assert(!is.fail());
64        assert(c == 'b');
65        is >> c;
66        assert(!is.eof());
67        assert(!is.fail());
68        assert(c == 'c');
69    }
70}
71