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