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