//===----------------------------------------------------------------------===//
//
// 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++98, c++03, c++11, c++14

// <any>

// any::has_value() noexcept

#include <any>
#include <cassert>

#include "test_macros.h"
#include "any_helpers.h"

int main(int, char**)
{
    using std::any;
    // noexcept test
    {
        any a;
        static_assert(noexcept(a.has_value()), "any::has_value() must be noexcept");
    }
    // empty
    {
        any a;
        assert(!a.has_value());

        a.reset();
        assert(!a.has_value());

        a = 42;
        assert(a.has_value());
    }
    // small object
    {
        small const s(1);
        any a(s);
        assert(a.has_value());

        a.reset();
        assert(!a.has_value());

        a = s;
        assert(a.has_value());
    }
    // large object
    {
        large const l(1);
        any a(l);
        assert(a.has_value());

        a.reset();
        assert(!a.has_value());

        a = l;
        assert(a.has_value());
    }

  return 0;
}
