signed_char_pointer.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
1221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org//===----------------------------------------------------------------------===// 2221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org// 3221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org// The LLVM Compiler Infrastructure 4221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org// 5221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org// This file is dual licensed under the MIT and the University of Illinois Open 6221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org// Source Licenses. See LICENSE.TXT for details. 7221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org// 8221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org//===----------------------------------------------------------------------===// 9221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org 10221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org// <istream> 11221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org 12221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org// template<class traits> 13221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org// basic_istream<char,traits>& operator>>(basic_istream<char,traits>&& in, signed char* s); 14221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org 15221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org#include <istream> 16bcf0a1019f34cac346bd8349c2206f9d06adbe4epbos@webrtc.org#include <cassert> 17221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org 18221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.orgtemplate <class CharT> 19221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.orgstruct testbuf 20221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org : public std::basic_streambuf<CharT> 21221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org{ 22221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org typedef std::basic_string<CharT> string_type; 23221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org typedef std::basic_streambuf<CharT> base; 24221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.orgprivate: 25221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org string_type str_; 26221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.orgpublic: 27221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org 28221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org testbuf() {} 29221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org testbuf(const string_type& str) 30221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org : str_(str) 31221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org { 32221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org base::setg(const_cast<CharT*>(str_.data()), 33221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org const_cast<CharT*>(str_.data()), 34221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org const_cast<CharT*>(str_.data()) + str_.size()); 35221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org } 36221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org 37221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org CharT* eback() const {return base::eback();} 38221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org CharT* gptr() const {return base::gptr();} 39221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org CharT* egptr() const {return base::egptr();} 40221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org}; 41221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org 42221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.orgint main() 43221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org{ 44221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org { 45221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org testbuf<char> sb(" abcdefghijk "); 46221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org std::istream is(&sb); 47221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org signed char s[20]; 48221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org is >> s; 49221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org assert(!is.eof()); 50221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org assert(!is.fail()); 51221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org assert(std::string((char*)s) == "abcdefghijk"); 52221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org } 53221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org { 54221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org testbuf<char> sb(" abcdefghijk "); 55221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org std::istream is(&sb); 56221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org is.width(4); 57221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org signed char s[20]; 58221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org is >> s; 59221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org assert(!is.eof()); 60221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org assert(!is.fail()); 61221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org assert(std::string((char*)s) == "abc"); 62221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org assert(is.width() == 0); 63221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org } 64221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org { 65221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org testbuf<char> sb(" abcdefghijk"); 66221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org std::istream is(&sb); 67221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org signed char s[20]; 68221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org is >> s; 69221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org assert( is.eof()); 70221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org assert(!is.fail()); 71221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org assert(std::string((char*)s) == "abcdefghijk"); 72221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org assert(is.width() == 0); 73221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org } 74221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org { 75221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org testbuf<char> sb(" abcdefghijk"); 76221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org std::istream is(&sb); 77221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org signed char s[20]; 78221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org is.width(1); 79221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org is >> s; 80221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org assert(!is.eof()); 81221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org assert( is.fail()); 82221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org assert(std::string((char*)s) == ""); 83221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org assert(is.width() == 0); 84221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org } 85221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org} 86221798a7c4ad83ba7fb8b3ae39b99d44278bbe5aandrew@webrtc.org