// RUN: %clang_cc1 -std=c++20 %s -verify
using size_t = __SIZE_TYPE__;
namespace CTAD {
template<typename T> struct A { constexpr A(T) {} };
template<A a> using DeducedA = decltype(a);
using ATest1 = DeducedA<A(0)>;
using ATest1 = A<int>; // expected-note {{previous}}
using ATest1 = void; // expected-error {{different}}
using ATest2 = DeducedA<A(0.0)>;
using ATest2 = A<double>;
template <size_t N> struct B {
constexpr B(const char (&r)[N]) { __builtin_memcpy(text, r, N); }
char text[N];
};
template<B b> constexpr const char *str() { return b.text; }
static_assert(__builtin_strcmp("hello world", str<"hello world">()) == 0);
}