1 // { dg-do run { target c++11 } } 2 3 // Copyright (C) 2014-2021 Free Software Foundation, Inc. 4 // 5 // This file is part of the GNU ISO C++ Library. This library is free 6 // software; you can redistribute it and/or modify it under the 7 // terms of the GNU General Public License as published by the 8 // Free Software Foundation; either version 3, or (at your option) 9 // any later version. 10 11 // This library is distributed in the hope that it will be useful, 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 // GNU General Public License for more details. 15 16 // You should have received a copy of the GNU General Public License along 17 // with this library; see the file COPYING3. If not see 18 // <http://www.gnu.org/licenses/>. 19 20 #include <set> 21 #include <stdexcept> 22 23 struct Comparator 24 { ComparatorComparator25 Comparator() : valid(false) { } ComparatorComparator26 explicit Comparator(bool) : valid(true) { } 27 operator ()Comparator28 bool operator()(int i, int j) const 29 { 30 if (!valid) 31 throw std::logic_error("Comparator is invalid"); 32 return i < j; 33 } 34 35 private: 36 bool valid; 37 }; 38 main()39int main() 40 { 41 using test_type = std::set<int, Comparator>; 42 43 Comparator cmp{true}; 44 45 test_type good{cmp}; 46 47 test_type s1; 48 s1 = good; // copy-assign 49 s1.insert(1); 50 s1.insert(2); 51 52 test_type s2; 53 s2 = std::move(good); // move-assign 54 s2.insert(1); 55 s2.insert(2); 56 } 57