14 #ifndef LLVM_CLANG_AST_NONTRIVIALTYPEVISITOR_H
15 #define LLVM_CLANG_AST_NONTRIVIALTYPEVISITOR_H
24 std::forward<Ts>(Args)...);
27 template <
class... Ts>
32 return asDerived().visitARCStrong(FT, std::forward<Ts>(Args)...);
34 return asDerived().visitStruct(FT, std::forward<Ts>(Args)...);
36 return asDerived().visitTrivial(FT, std::forward<Ts>(Args)...);
38 return asDerived().visitCXXDestructor(FT, std::forward<Ts>(Args)...);
40 return asDerived().visitARCWeak(FT, std::forward<Ts>(Args)...);
43 llvm_unreachable(
"unknown destruction kind");
46 Derived &
asDerived() {
return static_cast<Derived &
>(*this); }
49 template <
class Derived,
class RetTy =
void>
54 std::forward<Ts>(Args)...);
57 template <
class... Ts>
62 return asDerived().visitARCStrong(FT, std::forward<Ts>(Args)...);
64 return asDerived().visitARCWeak(FT, std::forward<Ts>(Args)...);
66 return asDerived().visitStruct(FT, std::forward<Ts>(Args)...);
68 return asDerived().visitTrivial(FT, std::forward<Ts>(Args)...);
71 llvm_unreachable(
"unknown default-initialize kind");
74 Derived &
asDerived() {
return static_cast<Derived &
>(*this); }
77 template <
class Derived,
bool IsMove,
class RetTy =
void>
83 return asDerived().visitWithKind(PCK, FT, std::forward<Ts>(Args)...);
86 template <
class... Ts>
89 asDerived().preVisit(PCK, FT, std::forward<Ts>(Args)...);
93 return asDerived().visitARCStrong(FT, std::forward<Ts>(Args)...);
95 return asDerived().visitARCWeak(FT, std::forward<Ts>(Args)...);
97 return asDerived().visitStruct(FT, std::forward<Ts>(Args)...);
99 return asDerived().visitTrivial(FT, std::forward<Ts>(Args)...);
101 return asDerived().visitVolatileTrivial(FT, std::forward<Ts>(Args)...);
104 llvm_unreachable(
"unknown primitive copy kind");
107 Derived &
asDerived() {
return static_cast<Derived &
>(*this); }