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