not_equal.pass.cpp revision 0cdbe6048173c1f05628dbc85430acf191a3e173
101afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant//===----------------------------------------------------------------------===//
201afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant//
301afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant//                     The LLVM Compiler Infrastructure
401afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant//
501afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
601afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
701afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant//
801afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant//===----------------------------------------------------------------------===//
901afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant
1001afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant
1101afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant// <optional>
1201afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant
1301afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant// template <class T> constexpr bool operator==(const optional<T>& x, nullopt_t) noexcept;
1401afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant// template <class T> constexpr bool operator==(nullopt_t, const optional<T>& x) noexcept;
1501afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant
160cdbe6048173c1f05628dbc85430acf191a3e173Marshall Clow#include <experimental/optional>
1701afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant
1801afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnantint main()
1901afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant{
2001afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant#if _LIBCPP_STD_VER > 11
210cdbe6048173c1f05628dbc85430acf191a3e173Marshall Clow	using std::experimental::optional;
220cdbe6048173c1f05628dbc85430acf191a3e173Marshall Clow	using std::experimental::nullopt_t;
230cdbe6048173c1f05628dbc85430acf191a3e173Marshall Clow	using std::experimental::nullopt;
240cdbe6048173c1f05628dbc85430acf191a3e173Marshall Clow
2501afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant    {
2601afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant    typedef int T;
270cdbe6048173c1f05628dbc85430acf191a3e173Marshall Clow    typedef optional<T> O;
2801afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant
2901afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant    constexpr O o1;     // disengaged
3001afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant    constexpr O o2{1};  // engaged
3101afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant
320cdbe6048173c1f05628dbc85430acf191a3e173Marshall Clow    static_assert (   nullopt == o1 , "" );
330cdbe6048173c1f05628dbc85430acf191a3e173Marshall Clow    static_assert ( !(nullopt == o2), "" );
340cdbe6048173c1f05628dbc85430acf191a3e173Marshall Clow    static_assert (   o1 == nullopt , "" );
350cdbe6048173c1f05628dbc85430acf191a3e173Marshall Clow    static_assert ( !(o2 == nullopt), "" );
3601afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant
370cdbe6048173c1f05628dbc85430acf191a3e173Marshall Clow    static_assert (noexcept(nullopt == o1), "");
380cdbe6048173c1f05628dbc85430acf191a3e173Marshall Clow    static_assert (noexcept(o1 == nullopt), "");
3901afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant    }
4001afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant#endif
4101afa5c6e407e985d9643707d7b7ab1384bd9317Howard Hinnant}
42