1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <memory>
11
12// weak_ptr
13
14// template<class U> bool owner_before(const weak_ptr<U>& b) const noexcept;
15
16#include <memory>
17#include <cassert>
18#include "test_macros.h"
19
20int main()
21{
22    const std::shared_ptr<int> p1(new int);
23    const std::shared_ptr<int> p2 = p1;
24    const std::shared_ptr<int> p3(new int);
25    const std::weak_ptr<int> w1(p1);
26    const std::weak_ptr<int> w2(p2);
27    const std::weak_ptr<int> w3(p3);
28    assert(!w1.owner_before(w2));
29    assert(!w2.owner_before(w1));
30    assert(w1.owner_before(w3) || w3.owner_before(w1));
31    assert(w3.owner_before(w1) == w3.owner_before(w2));
32    ASSERT_NOEXCEPT(w1.owner_before(w2));
33}
34