1fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow//===----------------------------------------------------------------------===// 2fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow// 3fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow// The LLVM Compiler Infrastructure 4fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow// 5fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow// This file is dual licensed under the MIT and the University of Illinois Open 6fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow// Source Licenses. See LICENSE.TXT for details. 7fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow// 8fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow//===----------------------------------------------------------------------===// 9fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow 10a3eac518e64aa0230894e4dde26c3f9714609e64Asiri Rathnayake// UNSUPPORTED: c++98, c++03, c++11 11fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow#include <memory> 12fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow#include <string> 13fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow#include <cassert> 14fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow 15fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow// The only way to create an unique_ptr<T[]> is to default construct them. 16fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow 17fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clowclass foo { 18fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clowpublic: 19fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow foo () : val_(3) {} 20fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow int get () const { return val_; } 21fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clowprivate: 22fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow int val_; 23fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow }; 24fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow 25fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clowint main() 26fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow{ 27fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow { 28fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow auto p1 = std::make_unique<int[]>(5); 29fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow for ( int i = 0; i < 5; ++i ) 30fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow assert ( p1[i] == 0 ); 31fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow } 3284acb1ec3f7d5e0f37d7176697c2fa876c413407Eric Fiselier 33fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow { 34fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow auto p2 = std::make_unique<std::string[]>(5); 35fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow for ( int i = 0; i < 5; ++i ) 36fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow assert ( p2[i].size () == 0 ); 37fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow } 3884acb1ec3f7d5e0f37d7176697c2fa876c413407Eric Fiselier 39fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow { 40fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow auto p3 = std::make_unique<foo[]>(7); 41fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow for ( int i = 0; i < 7; ++i ) 42fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow assert ( p3[i].get () == 3 ); 43fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow } 44fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow} 45