// RUN: %clang_cc1 -std=c++2a -verify %s | |
// expected-no-diagnostics | |
template<typename T> | |
concept C = (f(T()), true); | |
template<typename T> | |
constexpr bool foo() { return false; } | |
template<typename T> | |
requires (f(T()), true) | |
constexpr bool foo() requires (f(T()), true) { return true; } | |
namespace a { | |
struct A {}; | |
constexpr void f(A a) {} | |
} | |
static_assert(C<a::A>); | |
static_assert(foo<a::A>()); | |
namespace a { | |
// This makes calls to f ambiguous, but the second check will still succeed | |
// because the constraint satisfaction results are cached. | |
constexpr void f(A a, int = 2) {} | |
} | |
static_assert(C<a::A>); | |
static_assert(foo<a::A>()); |