Home | History | Annotate | Download | only in unique.ptr.observers
      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 // <memory>
     11 
     12 // unique_ptr
     13 
     14 // test get_deleter()
     15 
     16 #include <memory>
     17 #include <cassert>
     18 #include "test_macros.h"
     19 
     20 struct Deleter {
     21   Deleter() {}
     22 
     23   void operator()(void*) const {}
     24 
     25   int test() { return 5; }
     26   int test() const { return 6; }
     27 };
     28 
     29 template <bool IsArray>
     30 void test_basic() {
     31   typedef typename std::conditional<IsArray, int[], int>::type VT;
     32   {
     33     std::unique_ptr<int, Deleter> p;
     34     assert(p.get_deleter().test() == 5);
     35   }
     36   {
     37     const std::unique_ptr<VT, Deleter> p;
     38     assert(p.get_deleter().test() == 6);
     39   }
     40   {
     41     typedef std::unique_ptr<VT, const Deleter&> UPtr;
     42     const Deleter d;
     43     UPtr p(nullptr, d);
     44     const UPtr& cp = p;
     45     ASSERT_SAME_TYPE(decltype(p.get_deleter()), const Deleter&);
     46     ASSERT_SAME_TYPE(decltype(cp.get_deleter()), const Deleter&);
     47     assert(p.get_deleter().test() == 6);
     48     assert(cp.get_deleter().test() == 6);
     49   }
     50   {
     51     typedef std::unique_ptr<VT, Deleter&> UPtr;
     52     Deleter d;
     53     UPtr p(nullptr, d);
     54     const UPtr& cp = p;
     55     ASSERT_SAME_TYPE(decltype(p.get_deleter()), Deleter&);
     56     ASSERT_SAME_TYPE(decltype(cp.get_deleter()), Deleter&);
     57     assert(p.get_deleter().test() == 5);
     58     assert(cp.get_deleter().test() == 5);
     59   }
     60 }
     61 
     62 int main() {
     63   test_basic</*IsArray*/ false>();
     64   test_basic<true>();
     65 }
     66