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

// REQUIRES: std-at-least-c++26

// constant_wrapper

//   template<auto X>
//    constexpr auto cw = constant_wrapper<X>{};

#include <cassert>
#include <concepts>
#include <utility>
#include <cstddef>

struct S {
  int value;

  constexpr S(int v) : value(v) {}

  constexpr bool operator==(const S& other) const { return value == other.value; }
};

constexpr bool test() {
  {
    // int constant
    std::same_as<const std::constant_wrapper<42>> decltype(auto) cw_val = std::cw<42>;
    static_assert(cw_val == 42);
  }

  {
    // struct constant
    constexpr S s{13};
    std::same_as<const std::constant_wrapper<s>> decltype(auto) cw_val = std::cw<s>;
    static_assert(cw_val == s);
  }

  {
    // array constant
    constexpr static int arr[] = {1, 2, 3};
    // gcc complains that cw_val is unused
    [[maybe_unused]] std::same_as<const std::constant_wrapper<arr>> decltype(auto) cw_val = std::cw<arr>;
    static_assert(cw_val[0] == 1);
    static_assert(cw_val[1] == 2);
    static_assert(cw_val[2] == 3);
  }

  return true;
}

int main(int, char**) {
  test();
  static_assert(test());

  return 0;
}
