pointer_deleter04.fail.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
172f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill//===----------------------------------------------------------------------===//
272f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill//
372f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill//                     The LLVM Compiler Infrastructure
472f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill//
504bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson// This file is dual licensed under the MIT and the University of Illinois Open
604bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson// Source Licenses. See LICENSE.TXT for details.
704bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson//
804bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson//===----------------------------------------------------------------------===//
904bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson
1004bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson// <memory>
1104bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson
1204bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson// unique_ptr
1304bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson
1404bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson// Test unique_ptr(pointer, deleter) ctor
1504bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson
1604bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson// unique_ptr<T, const D&>(pointer, D()) should not compile
1704bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson
1804bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson#include <memory>
1904bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson#include <cassert>
2004bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson
2104bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilsonstruct A
2204bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson{
2304bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson    static int count;
2404bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson    A() {++count;}
2504bac60c69e4d48abe44d60b3c2efa28edc470aaBrett Wilson    A(const A&) {++count;}
262f5469c2d6559c7580f8ffbb47b16920a4e16660Brett Wilson    ~A() {--count;}
272f5469c2d6559c7580f8ffbb47b16920a4e16660Brett Wilson};
282f5469c2d6559c7580f8ffbb47b16920a4e16660Brett Wilson
292f5469c2d6559c7580f8ffbb47b16920a4e16660Brett Wilsonint A::count = 0;
302f5469c2d6559c7580f8ffbb47b16920a4e16660Brett Wilson
312f5469c2d6559c7580f8ffbb47b16920a4e16660Brett Wilsonclass Deleter
322f5469c2d6559c7580f8ffbb47b16920a4e16660Brett Wilson{
332f5469c2d6559c7580f8ffbb47b16920a4e16660Brett Wilson    int state_;
3472f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill
3572f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madillpublic:
3672f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill
3772f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill    Deleter() : state_(5) {}
3872f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill
3972f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill    int state() const {return state_;}
4072f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill    void set_state(int s) {state_ = s;}
4172f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill
4272f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill    void operator()(A* p) const {delete [] p;}
4372f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill};
4472f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill
45e5c97abd327c1f12ed93373a964c8d9a1c82731cJamie Madillint main()
4672f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill{
4772f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill    {
4872f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill    A* p = new A[3];
4972f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill    assert(A::count == 3);
5072f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill    std::unique_ptr<A[], const Deleter&> s(p, Deleter());
5172f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill    assert(s.get() == p);
5272f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill    assert(s.get_deleter().state() == 5);
5372f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill    }
5472f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill    assert(A::count == 0);
5572f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill}
5672f5b5eee751f8b9b0f92456dcf7b58c19602505Jamie Madill