//===----------------------------------------------------------------------===//
//
// 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

// <tuple>

// inline constexpr ignore-type ignore;

#include <cassert>
#include <cstdint>
#include <tuple>
#include <type_traits>

#include "test_macros.h"

static_assert(std::is_trivially_copyable<decltype(std::ignore)>::value, "");
static_assert(std::is_trivially_default_constructible<decltype(std::ignore)>::value, "");

#if TEST_STD_VER >= 17
[[nodiscard]] constexpr int test_nodiscard() { return 8294; }
#endif

TEST_CONSTEXPR_CXX14 bool test() {
  { [[maybe_unused]] auto& ignore_v = std::ignore; }

  { // Test that std::ignore provides converting assignment.
    auto& res = (std::ignore = 42);
    static_assert(noexcept(res = (std::ignore = 42)), "Must be noexcept");
    assert(&res == &std::ignore);
  }
  { // Test bit-field binding.
    struct S {
      unsigned int bf : 3;
    };
    S s{0b010};
    auto& res = (std::ignore = s.bf);
    assert(&res == &std::ignore);
  }
  { // Test that std::ignore provides copy/move constructors
    auto copy                   = std::ignore;
    [[maybe_unused]] auto moved = std::move(copy);
  }
  { // Test that std::ignore provides copy/move assignment
    auto copy  = std::ignore;
    copy       = std::ignore;
    auto moved = std::ignore;
    moved      = std::move(copy);
  }

#if TEST_STD_VER >= 17
  { std::ignore = test_nodiscard(); }
#endif

  return true;
}

int main(int, char**) {
  test();
#if TEST_STD_VER >= 14
  static_assert(test(), "");
#endif

  return 0;
}
