13fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//===----------------------------------------------------------------------===//
23fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//
33fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//                     The LLVM Compiler Infrastructure
43fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//
53fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
63fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
73fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//
83fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//===----------------------------------------------------------------------===//
93fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant
103fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant// <memory>
113fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant
123fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant// shared_ptr
133fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant
143fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant// template <class T, class D>
153fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//     bool operator==(const unique_ptr<T, D>& x, nullptr_t) noexcept;
163fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant// template <class T, class D>
173fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//     bool operator==(nullptr_t, const unique_ptr<T, D>& y) noexcept;
183fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant// template <class T, class D>
193fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//     bool operator!=(const unique_ptr<T, D>& x, nullptr_t) noexcept;
203fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant// template <class T, class D>
213fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//     bool operator!=(nullptr_t, const unique_ptr<T, D>& y) noexcept;
223fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant// template <class T, class D>
233fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//     bool operator<(const unique_ptr<T, D>& x, nullptr_t) noexcept;
243fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant// template <class T, class D>
253fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//     bool operator<(nullptr_t, const unique_ptr<T, D>& y) noexcept;
263fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant// template <class T, class D>
273fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//     bool operator<=(const unique_ptr<T, D>& x, nullptr_t) noexcept;
283fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant// template <class T, class D>
293fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//     bool operator<=(nullptr_t, const unique_ptr<T, D>& y) noexcept;
303fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant// template <class T, class D>
313fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//     bool operator>(const unique_ptr<T, D>& x, nullptr_t) noexcept;
323fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant// template <class T, class D>
333fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//     bool operator>(nullptr_t, const unique_ptr<T, D>& y) noexcept;
343fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant// template <class T, class D>
353fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//     bool operator>=(const unique_ptr<T, D>& x, nullptr_t) noexcept;
363fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant// template <class T, class D>
373fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant//     bool operator>=(nullptr_t, const unique_ptr<T, D>& y) noexcept;
383fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant
393fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant#include <memory>
403fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant#include <cassert>
413fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant
423fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnantvoid do_nothing(int*) {}
433fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant
443fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnantint main()
453fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant{
463fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    const std::unique_ptr<int> p1(new int(1));
473fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert(!(p1 == nullptr));
483fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert(!(nullptr == p1));
493fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert(!(p1 < nullptr));
503fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert( (nullptr < p1));
513fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert(!(p1 <= nullptr));
523fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert( (nullptr <= p1));
533fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert( (p1 > nullptr));
543fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert(!(nullptr > p1));
553fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert( (p1 >= nullptr));
563fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert(!(nullptr >= p1));
573fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant
583fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    const std::unique_ptr<int> p2;
593fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert( (p2 == nullptr));
603fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert( (nullptr == p2));
613fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert(!(p2 < nullptr));
623fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert(!(nullptr < p2));
633fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert( (p2 <= nullptr));
643fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert( (nullptr <= p2));
653fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert(!(p2 > nullptr));
663fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert(!(nullptr > p2));
673fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert( (p2 >= nullptr));
683fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant    assert( (nullptr >= p2));
693fadda314ad3b1fd0ba16db83476a9d5a7b58d78Howard Hinnant}
70