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