1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef TEST_STD_UTILITIES_MEMORY_UTIL_SMARTPTR_SHARED_CONST_TYPES_H 10 #define TEST_STD_UTILITIES_MEMORY_UTIL_SMARTPTR_SHARED_CONST_TYPES_H 11 12 #include <type_traits> 13 14 struct bad_type {}; 15 16 struct bad_deleter { operatorbad_deleter17 void operator()(bad_type) {} 18 }; 19 20 struct no_move_deleter { 21 no_move_deleter(no_move_deleter const&) = delete; 22 no_move_deleter(no_move_deleter&&) = delete; operatorno_move_deleter23 void operator()(int*) {} 24 }; 25 26 static_assert(!std::is_move_constructible<no_move_deleter>::value, ""); 27 28 struct no_nullptr_deleter { operatorno_nullptr_deleter29 void operator()(int*) const {} 30 void operator()(std::nullptr_t) const = delete; 31 }; 32 33 struct base {}; 34 struct derived : base {}; 35 36 template <class T> 37 class move_deleter { 38 move_deleter(); 39 move_deleter(move_deleter const&); 40 41 public: move_deleter(move_deleter &&)42 move_deleter(move_deleter&&) {} 43 move_deleter(int)44 explicit move_deleter(int) {} 45 operator()46 void operator()(T* ptr) { delete ptr; } 47 }; 48 49 #endif // TEST_STD_UTILITIES_MEMORY_UTIL_SMARTPTR_SHARED_CONST_TYPES_H 50