1 // Copyright (C) 2013-2020 Free Software Foundation, Inc. 2 // 3 // This file is part of the GNU ISO C++ Library. This library is free 4 // software; you can redistribute it and/or modify it under the 5 // terms of the GNU General Public License as published by the 6 // Free Software Foundation; either version 3, or (at your option) 7 // any later version. 8 9 // This library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 14 // You should have received a copy of the GNU General Public License along 15 // with this library; see the file COPYING3. If not see 16 // <http://www.gnu.org/licenses/>. 17 18 namespace in_place { 19 20 static void 21 test () 22 { 23 // [20.5.5] In-place construction 24 { 25 gdb::optional<int> o { gdb::in_place }; 26 VERIFY( o ); 27 VERIFY( *o == int() ); 28 29 #ifndef GDB_OPTIONAL 30 static_assert( !std::is_convertible<gdb::in_place_t, gdb::optional<int>>(), "" ); 31 #endif 32 } 33 34 { 35 gdb::optional<int> o { gdb::in_place, 42 }; 36 VERIFY( o ); 37 VERIFY( *o == 42 ); 38 } 39 40 { 41 gdb::optional<std::vector<int>> o { gdb::in_place, 18, 4 }; 42 VERIFY( o ); 43 VERIFY( o->size() == 18 ); 44 VERIFY( (*o)[17] == 4 ); 45 } 46 47 #ifndef GDB_OPTIONAL 48 { 49 gdb::optional<std::vector<int>> o { gdb::in_place, { 18, 4 } }; 50 VERIFY( o ); 51 VERIFY( o->size() == 2 ); 52 VERIFY( (*o)[0] == 18 ); 53 } 54 #endif 55 56 #ifndef GDB_OPTIONAL 57 { 58 gdb::optional<std::vector<int>> o { gdb::in_place, { 18, 4 }, std::allocator<int> {} }; 59 VERIFY( o ); 60 VERIFY( o->size() == 2 ); 61 VERIFY( (*o)[0] == 18 ); 62 } 63 #endif 64 } 65 66 } // namespace in_place 67