setstate.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)//===----------------------------------------------------------------------===// 223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// 323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// ��������������������The LLVM Compiler Infrastructure 423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// 523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// This file is distributed under the University of Illinois Open Source 623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// License. See LICENSE.TXT for details. 723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// 823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)//===----------------------------------------------------------------------===// 923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// <ios> 1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// template <class charT, class traits> class basic_ios 1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// void setstate(iostate state); 1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include <ios> 1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include <streambuf> 1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include <cassert> 1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)struct testbuf : public std::streambuf {}; 2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)int main() 2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles){ 2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { 2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::ios ios(0); 2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ios.setstate(std::ios::goodbit); 2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) assert(ios.rdstate() == std::ios::badbit); 2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) try 2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { 3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ios.exceptions(std::ios::badbit); 3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) catch (...) 3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { 3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) try 3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { 3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ios.setstate(std::ios::goodbit); 3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) assert(false); 3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) catch (std::ios::failure&) 4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { 4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) assert(ios.rdstate() == std::ios::badbit); 4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) try 4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { 4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ios.setstate(std::ios::eofbit); 4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) assert(false); 4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) catch (std::ios::failure&) 5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { 5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) assert(ios.rdstate() == (std::ios::eofbit | std::ios::badbit)); 5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) } 5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { 5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) testbuf sb; 5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) std::ios ios(&sb); 5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ios.setstate(std::ios::goodbit); 58 assert(ios.rdstate() == std::ios::goodbit); 59 ios.setstate(std::ios::eofbit); 60 assert(ios.rdstate() == std::ios::eofbit); 61 ios.setstate(std::ios::failbit); 62 assert(ios.rdstate() == (std::ios::eofbit | std::ios::failbit)); 63 } 64} 65