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 10fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow#include <memory> 11fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow#include <string> 12fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow#include <cassert> 13fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow 14fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow// The only way to create an unique_ptr<T[]> is to default construct them. 15fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow 16fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clowclass foo { 17fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clowpublic: 18fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow foo () : val_(3) {} 19fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow int get () const { return val_; } 20fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clowprivate: 21fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow int val_; 22fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow }; 23fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow 24fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clowint main() 25fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow{ 26fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow#if _LIBCPP_STD_VER > 11 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 } 32fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow 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 } 38fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow 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#endif // _LIBCPP_STD_VER > 11 45fd7481e96de307dd0e43c96d5b025b7c779f72d7Marshall Clow} 46