]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/Modules/Inputs/cxx-templates-a.h
Vendor import of clang release_34 branch r197841 (effectively, 3.4 RC3):
[FreeBSD/FreeBSD.git] / test / Modules / Inputs / cxx-templates-a.h
1 @import cxx_templates_common;
2
3 template<typename T> T f() { return T(); }
4 template<typename T> T f(T);
5 namespace N {
6   template<typename T> T f() { return T(); }
7   template<typename T> T f(T);
8 }
9
10 template<int N> int template_param_kinds_1();
11 template<template<typename T, int, int> class> int template_param_kinds_2();
12 template<template<typename T, typename U, T> class> int template_param_kinds_3();
13
14 template<typename T> struct SomeTemplate<T*>;
15 template<typename T> struct SomeTemplate<T*> {};
16 typedef SomeTemplate<int*> SomeTemplateIntPtr;
17
18 template<typename T> void PerformDelayedLookup(T &t) {
19   t.f();
20   typename T::Inner inner;
21   FoundByADL(t);
22 }
23
24 template<typename T> void PerformDelayedLookupInDefaultArgument(T &t, int a = (FoundByADL(T()), 0)) {}
25
26 template<typename T> struct RedeclaredAsFriend {};
27
28 void use_some_template_a() {
29   SomeTemplate<char[2]> a;
30   SomeTemplate<char[1]> b, c;
31   b = c;
32 }
33
34 template<int> struct MergeTemplates;
35 MergeTemplates<0> *merge_templates_a;
36
37 auto enum_a_from_a = CommonTemplate<int>::a;
38 const auto enum_c_from_a = CommonTemplate<int>::c;
39
40 template<int> struct UseInt;
41 template<typename T> void UseRedeclaredEnum(UseInt<T() + CommonTemplate<char>::a>);
42 constexpr void (*UseRedeclaredEnumA)(UseInt<1>) = UseRedeclaredEnum<int>;
43
44 template<typename> struct MergeSpecializations;
45 template<typename T> struct MergeSpecializations<T*> {
46   typedef int partially_specialized_in_a;
47 };
48 template<> struct MergeSpecializations<char> {
49   typedef int explicitly_specialized_in_a;
50 };