1// { dg-do compile } 2// { dg-options "-std=gnu++11" } 3 4// Copyright (C) 2008-2015 Free Software Foundation, Inc. 5// 6// This file is part of the GNU ISO C++ Library. This library is free 7// software; you can redistribute it and/or modify it under the 8// terms of the GNU General Public License as published by the 9// Free Software Foundation; either version 3, or (at your option) 10// any later version. 11 12// This library is distributed in the hope that it will be useful, 13// but WITHOUT ANY WARRANTY; without even the implied warranty of 14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15// GNU General Public License for more details. 16 17// You should have received a copy of the GNU General Public License 18// along with this library; see the file COPYING3. If not see 19// <http://www.gnu.org/licenses/>. 20 21#include <memory> 22 23struct base { virtual ~base() {} }; 24struct derived : base {}; 25 26void 27test01() 28{ 29 std::unique_ptr<derived> p1(new derived); 30 std::unique_ptr<derived> p2(new derived); 31// p2 = p1; // should not compile 32 p2 = std::move(p1); 33 std::unique_ptr<base> p3(new base); 34// p3 = p2; // should not compile 35 p3 = std::move(p2); 36} 37 38void 39test02() 40{ 41 std::unique_ptr<int[]> p1(new int(420)); 42 std::unique_ptr<int[]> p2 = p1; // { dg-error "deleted" } 43} 44 45void 46test03() 47{ 48 std::unique_ptr<int[2]> p1(new int[3]); // { dg-error "no match" } 49 std::unique_ptr<int[2]> p2 = p1; // { dg-error "deleted" } 50} 51 52// { dg-prune-output "include" } 53