xref: /llvm-project/clang/test/SemaTemplate/alias-template-nondependent.cpp (revision 740a164dec483225cbd02ab6c82199e2747ffacb)
1 // RUN: %clang_cc1 -std=c++20 -verify %s
2 
3 namespace PR46377 {
4   template<typename> using IntPtr = int*;
non_dependent_typedef()5   template<typename ...T> auto non_dependent_typedef() {
6     typedef int(*P)(IntPtr<T>...);
7     return P();
8   }
non_dependent_alias()9   template<typename ...T> auto non_dependent_alias() {
10     using P = int(*)(IntPtr<T>...);
11     return P();
12   }
non_dependent_via_sizeof()13   template<typename ...T> auto non_dependent_via_sizeof() {
14     using P = int(*)(int(...pack)[sizeof(sizeof(T))]); // expected-error {{invalid application of 'sizeof'}}
15     return P();
16   }
17 
18   using a = int (*)(int*, int*);
19   using a = decltype(non_dependent_typedef<void, void>());
20   using a = decltype(non_dependent_alias<void, void>());
21   using a = decltype(non_dependent_via_sizeof<float, float>());
22 
23   using b = decltype(non_dependent_via_sizeof<float, void>()); // expected-note {{instantiation of}}
24 }
25