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