1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // utilities 11 12 // exchange 13 14 #include <utility> 15 #include <cassert> 16 #include <string> 17 main()18int main() 19 { 20 #if _LIBCPP_STD_VER > 11 21 { 22 int v = 12; 23 assert ( std::exchange ( v, 23 ) == 12 ); 24 assert ( v == 23 ); 25 assert ( std::exchange ( v, 67.2 ) == 23 ); 26 assert ( v == 67 ); 27 28 assert ((std::exchange<int, float> ( v, {} )) == 67 ); 29 assert ( v == 0 ); 30 31 } 32 33 { 34 bool b = false; 35 assert ( !std::exchange ( b, true )); 36 assert ( b ); 37 } 38 39 { 40 const std::string s1 ( "Hi Mom!" ); 41 const std::string s2 ( "Yo Dad!" ); 42 std::string s3 = s1; // Mom 43 assert ( std::exchange ( s3, s2 ) == s1 ); 44 assert ( s3 == s2 ); 45 assert ( std::exchange ( s3, "Hi Mom!" ) == s2 ); 46 assert ( s3 == s1 ); 47 48 s3 = s2; // Dad 49 assert ( std::exchange ( s3, {} ) == s2 ); 50 assert ( s3.size () == 0 ); 51 52 s3 = s2; // Dad 53 assert ( std::exchange ( s3, "" ) == s2 ); 54 assert ( s3.size () == 0 ); 55 } 56 57 #endif 58 } 59