// 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); }