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

// XFAIL: availability-fp_to_chars-missing

// The sample code is based on the bug report
// https://github.com/llvm/llvm-project/issues/81590
//
// Tests whether this formatter does not fail to compile due to nested concept
// evaluation.

#include <format>
#include <variant>

struct X : std::variant<X*> {
  X* p = nullptr;
  constexpr const std::variant<X*>& decay() const noexcept { return *this; }
};

template <>
struct std::formatter<X, char> : std::formatter<std::string, char> {
  static constexpr auto format(const X& x, auto ctx) {
    if (!x.p)
      return ctx.out();
    auto m = [&](const X* t) { return std::format_to(ctx.out(), "{}", *t); };
    return std::visit(m, x.decay());
  }
};

void bug_81590() { (void)std::format("{}", X{}); }
