111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===//
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//                     The LLVM Compiler Infrastructure
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// This file is dual licensed under the MIT and the University of Illinois Open
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Source Licenses. See LICENSE.TXT for details.
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//===----------------------------------------------------------------------===//
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <memory>
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <string>
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <cassert>
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//    The only way to create an unique_ptr<T[]> is to default construct them.
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass foo {
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic:
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    foo () : val_(3) {}
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int get () const { return val_; }
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprivate:
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int val_;
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    };
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint main()
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if _LIBCPP_STD_VER > 11
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    auto p1 = std::make_unique<int[]>(5);
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    for ( int i = 0; i < 5; ++i )
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert ( p1[i] == 0 );
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    auto p2 = std::make_unique<std::string[]>(5);
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    for ( int i = 0; i < 5; ++i )
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert ( p2[i].size () == 0 );
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    {
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    auto p3 = std::make_unique<foo[]>(7);
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    for ( int i = 0; i < 7; ++i )
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert        assert ( p3[i].get () == 3 );
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    }
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif  // _LIBCPP_STD_VER > 11
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
46