//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test get_deleter() #include #include #include "test_macros.h" struct Deleter { Deleter() {} void operator()(void*) const {} int test() { return 5; } int test() const { return 6; } }; template void test_basic() { typedef typename std::conditional::type VT; { std::unique_ptr p; assert(p.get_deleter().test() == 5); } { const std::unique_ptr p; assert(p.get_deleter().test() == 6); } { typedef std::unique_ptr UPtr; const Deleter d; UPtr p(nullptr, d); const UPtr& cp = p; ASSERT_SAME_TYPE(decltype(p.get_deleter()), const Deleter&); ASSERT_SAME_TYPE(decltype(cp.get_deleter()), const Deleter&); assert(p.get_deleter().test() == 6); assert(cp.get_deleter().test() == 6); } { typedef std::unique_ptr UPtr; Deleter d; UPtr p(nullptr, d); const UPtr& cp = p; ASSERT_SAME_TYPE(decltype(p.get_deleter()), Deleter&); ASSERT_SAME_TYPE(decltype(cp.get_deleter()), Deleter&); assert(p.get_deleter().test() == 5); assert(cp.get_deleter().test() == 5); } } int main() { test_basic(); test_basic(); }