swap.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
1583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o//===----------------------------------------------------------------------===// 2583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o// 3583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o// The LLVM Compiler Infrastructure 4583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o// 5583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o// This file is dual licensed under the MIT and the University of Illinois Open 6583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o// Source Licenses. See LICENSE.TXT for details. 7583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o// 8583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o//===----------------------------------------------------------------------===// 9583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 10583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o// <ios> 11583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 12583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o// template <class charT, class traits> class basic_ios 13583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 14583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o// void move(basic_ios&& rhs); 15583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 16583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#include <ios> 17583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#include <streambuf> 18583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o#include <cassert> 19583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 20583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ostruct testbuf 21583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o : public std::streambuf 227c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o{ 23583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o}; 24583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 25583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ostruct testios 26583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o : public std::ios 27583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 28583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o testios(std::streambuf* p) : std::ios(p) {} 29583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o void swap(std::ios& x) {std::ios::swap(x);} 30583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o}; 31583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 32583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'obool f1_called = false; 33583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'obool f2_called = false; 34583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 35583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'obool g1_called = false; 36efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'obool g2_called = false; 37583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'obool g3_called = false; 38583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 39583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid f1(std::ios_base::event ev, std::ios_base& stream, int index) 40583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 41583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(index == 4); 42583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o f1_called = true; 43efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o} 44583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 45efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'ovoid f2(std::ios_base::event ev, std::ios_base& stream, int index) 46583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 47583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(index == 5); 48583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o f2_called = true; 49583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 50583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 51583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid g1(std::ios_base::event ev, std::ios_base& stream, int index) 52583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 53583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(index == 7); 54583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o g1_called = true; 55583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 56efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 57583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid g2(std::ios_base::event ev, std::ios_base& stream, int index) 58efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o{ 59583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(index == 8); 60efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o g2_called = true; 61583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 62583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 63583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'ovoid g3(std::ios_base::event ev, std::ios_base& stream, int index) 64583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o{ 65583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(index == 9); 66583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o g3_called = true; 67583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 68583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 69583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'oint main() 70efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o{ 71583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o testbuf sb1; 72583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o testios ios1(&sb1); 73583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios1.flags(std::ios::boolalpha | std::ios::dec | std::ios::fixed); 74583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios1.precision(1); 75583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios1.width(11); 76583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios1.imbue(std::locale("en_US")); 77efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o ios1.exceptions(std::ios::failbit); 78583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios1.setstate(std::ios::eofbit); 79583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios1.register_callback(f1, 4); 80583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios1.register_callback(f2, 5); 81583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios1.iword(0) = 1; 82583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios1.iword(1) = 2; 83583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios1.iword(2) = 3; 84efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o char c1, c2, c3; 85583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios1.pword(0) = &c1; 86efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o ios1.pword(1) = &c2; 87583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios1.pword(2) = &c3; 88efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o ios1.tie((std::ostream*)1); 897c36779aebf962d44ce9f320efd40658a44ff063Theodore Ts'o ios1.fill('1'); 90583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 910f31c737dbf999c90a0842e6a499416b8e1f0cb4Theodore Ts'o testbuf sb2; 925e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o testios ios2(&sb2); 93583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.flags(std::ios::showpoint | std::ios::uppercase); 94583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.precision(2); 95583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.width(12); 96583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.imbue(std::locale("fr_FR")); 97583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.exceptions(std::ios::eofbit); 98583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.setstate(std::ios::goodbit); 995e941d2979aeab97929de6c0682425dead3bae74Theodore Ts'o ios2.register_callback(g1, 7); 100efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o ios2.register_callback(g2, 8); 101583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.register_callback(g3, 9); 102583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.iword(0) = 4; 103583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.iword(1) = 5; 104583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.iword(2) = 6; 105efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o ios2.iword(3) = 7; 106583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.iword(4) = 8; 107583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.iword(5) = 9; 108583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o char d1, d2; 109583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.pword(0) = &d1; 110583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.pword(1) = &d2; 111583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.tie((std::ostream*)2); 112583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.fill('2'); 113583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 114efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o ios1.swap(ios2); 115583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 116583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.rdstate() == std::ios::goodbit); 117583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.rdbuf() == &sb1); 118583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.flags() == (std::ios::showpoint | std::ios::uppercase)); 119583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.precision() == 2); 120583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.width() == 12); 121583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.getloc().name() == "fr_FR"); 122583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.exceptions() == std::ios::eofbit); 123583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(!f1_called); 124583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(!f2_called); 125583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(!g1_called); 126583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(!g2_called); 127583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(!g3_called); 128583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.iword(0) == 4); 129583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.iword(1) == 5); 130583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.iword(2) == 6); 131583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.iword(3) == 7); 132583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.iword(4) == 8); 133583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.iword(5) == 9); 134583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.pword(0) == &d1); 135583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.pword(1) == &d2); 136583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.tie() == (std::ostream*)2); 137583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios1.fill() == '2'); 138583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios1.imbue(std::locale("C")); 139583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(!f1_called); 140583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(!f2_called); 141583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(g1_called); 142583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(g2_called); 143583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(g3_called); 144583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o 145583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios2.rdstate() == std::ios::eofbit); 146583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios2.rdbuf() == &sb2); 147583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios2.flags() == (std::ios::boolalpha | std::ios::dec | std::ios::fixed)); 148583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios2.precision() == 1); 149583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios2.width() == 11); 150583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios2.getloc().name() == "en_US"); 151583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios2.exceptions() == std::ios::failbit); 152efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o assert(ios2.iword(0) == 1); 153583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios2.iword(1) == 2); 154583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios2.iword(2) == 3); 155583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios2.pword(0) == &c1); 156583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios2.pword(1) == &c2); 157583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios2.pword(2) == &c3); 158efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o assert(ios2.tie() == (std::ostream*)1); 159583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(ios2.fill() == '1'); 160583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o ios2.imbue(std::locale("C")); 161583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(f1_called); 162583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o assert(f2_called); 163583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o} 164583a1ce5d1b225a6b01fc2b30a3bcb21fd0d48c9Theodore Ts'o