46 lines · c
1#ifndef ADT2#define ADT3 4#ifdef WITH_NAMESPACE5namespace llvm {6#endif7template <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 AlignedCharArrayUnion24 : 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_NAMESPACE43} // namespace llvm44#endif45#endif46