Clang Project

clang_source_code/test/Modules/Inputs/lsv-debuginfo/A/ADT.h
1#ifndef ADT
2#define ADT
3
4#ifdef WITH_NAMESPACE
5namespace llvm {
6#endif
7template <unsigned Alignment, unsigned Size>
8struct AlignedCharArray {
9  alignas(Alignment) char buffer[Size];
10};
11
12template <typename T1>
13class AlignerImpl {
14  T1 t1;
15};
16
17template <typename T1>
18union SizerImpl {
19  char arr1[sizeof(T1)];
20};
21
22template <typename T1>
23struct AlignedCharArrayUnion
24    : AlignedCharArray<alignof(AlignerImpl<T1>), sizeof(SizerImpl<T1>)> {};
25
26template <typename T, unsigned N>
27struct SmallVectorStorage {
28  AlignedCharArrayUnion<T> InlineElts[N];
29};
30template <typename T, unsigned N>
31class SmallVector : SmallVectorStorage<T, N> {};
32
33template <typename T>
34struct OptionalStorage {
35  AlignedCharArrayUnion<T> storage;
36};
37template <typename T>
38class Optional {
39  OptionalStorage<T> Storage;
40};
41
42#ifdef WITH_NAMESPACE
43} // namespace llvm
44#endif
45#endif
46