1760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org//===----------------------------------------------------------------------===//
2760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org//
3760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org//                     The LLVM Compiler Infrastructure
4760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org//
5760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org// This file is dual licensed under the MIT and the University of Illinois Open
6760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org// Source Licenses. See LICENSE.TXT for details.
7760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org//
8760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org//===----------------------------------------------------------------------===//
9760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org
10760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org// <memory>
11760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org
12760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org// weak_ptr
13760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org
14760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org// template<class U> bool owner_before(const weak_ptr<U>& b);
15760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org
16760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include <memory>
17760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include <cassert>
18760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org
19760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgint main()
20760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{
21760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    const std::shared_ptr<int> p1(new int);
22760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    const std::shared_ptr<int> p2 = p1;
23760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    const std::shared_ptr<int> p3(new int);
24    const std::weak_ptr<int> w1(p1);
25    const std::weak_ptr<int> w2(p2);
26    const std::weak_ptr<int> w3(p3);
27    assert(!w1.owner_before(w2));
28    assert(!w2.owner_before(w1));
29    assert(w1.owner_before(w3) || w3.owner_before(w1));
30    assert(w3.owner_before(w1) == w3.owner_before(w2));
31}
32