//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

// UNSUPPORTED: c++03

// <functional>
//
// reference_wrapper
//
// template <class U>
//   reference_wrapper(U&&);

#include <functional>
#include <cassert>

struct B {} b;

struct A1 {
    operator B& () const { return b; }
};
struct A2 {
    operator B& () const noexcept { return b; }
};

int main()
{
    {
    std::reference_wrapper<B> b1 = A1();
    assert(&b1.get() == &b);
    b1 = A1();
    assert(&b1.get() == &b);

    static_assert(std::is_convertible<A1, std::reference_wrapper<B>>::value, "");
    static_assert(!std::is_nothrow_constructible<std::reference_wrapper<B>, A1>::value, "");
#if TEST_STD_VER >= 20
    static_assert(!std::is_nothrow_convertible_v<A1, std::reference_wrapper<B>>);
#endif
    static_assert(std::is_assignable<std::reference_wrapper<B>, A1>::value, "");
    static_assert(!std::is_nothrow_assignable<std::reference_wrapper<B>, A1>::value, "");
    }

    {
    std::reference_wrapper<B> b2 = A2();
    assert(&b2.get() == &b);
    b2 = A2();
    assert(&b2.get() == &b);

    static_assert(std::is_convertible<A2, std::reference_wrapper<B>>::value, "");
    static_assert(std::is_nothrow_constructible<std::reference_wrapper<B>, A2>::value, "");
#if TEST_STD_VER >= 20
    static_assert(std::is_nothrow_convertible_v<A2, std::reference_wrapper<B>>);
#endif
    static_assert(std::is_assignable<std::reference_wrapper<B>, A2>::value, "");
    static_assert(std::is_nothrow_assignable<std::reference_wrapper<B>, A2>::value, "");
    }
}
