LLVM: include/llvm/Support/FormatVariadicDetails.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9#ifndef LLVM_SUPPORT_FORMATVARIADICDETAILS_H

10#define LLVM_SUPPORT_FORMATVARIADICDETAILS_H

11

16

17#include <type_traits>

18

19namespace llvm {

20template <typename T, typename Enable = void> struct format_provider {};

22

26 virtual void anchor();

27

28protected:

30

31public:

33};

34

36 T Item;

37

38public:

40

44};

45

46template

48 T Item;

49

50public:

52 : Item(std::forward<T>(Item)) {}

53

55};

56

58

59

60

61

62

64public:

68

70

71 static constexpr bool value =

73};

74

75

77public:

78 using ConstRefT = const std::decay_t &;

79

80 template

82 -> std::is_same<decltype(std::declval<llvm::raw_ostream &>()

83 << std::declval()),

85

86 template static auto test(...) -> std::false_type;

87

89};

90

91

92

93template

95 : public std::is_base_of<format_adapter, std::remove_reference_t> {};

96

97

98

99

100template

102 : public std::bool_constant<!uses_format_member::value &&

103 has_FormatProvider::value> {};

104

105

106

107template

109 : public std::bool_constant<!uses_format_member::value &&

110 !uses_format_provider::value &&

111 has_StreamOperator::value> {};

112

113

114

115

116

117template

119 : public std::bool_constant<!uses_format_member::value &&

120 !uses_format_provider::value &&

121 !uses_stream_operator::value> {};

122

123template

124std::enable_if_t<uses_format_member::value, T>

126 return std::forward(Item);

127}

128

129template

130std::enable_if_t<uses_format_provider::value, provider_format_adapter>

134

135template

136std::enable_if_t<uses_stream_operator::value,

137 stream_operator_format_adapter>

139

140

141

142 static_assert(

143 !std::is_same_v<llvm::Error, std::remove_cv_t>,

144 "llvm::Error-by-value must be wrapped in fmt_consume() for formatv");

146}

147

148template

149std::enable_if_t<uses_missing_provider::value, missing_format_adapter>

153}

154}

155}

156

157#endif

Lightweight error class with error context and mandatory checking.

StringRef - Represent a constant reference to a string, i.e.

This class implements an extremely fast bulk output stream that can only output to a stream.

virtual ~format_adapter()=default

virtual void format(raw_ostream &S, StringRef Options)=0

void(*)(const Decayed &, llvm::raw_ostream &, StringRef) Signature_format

Definition FormatVariadicDetails.h:66

static constexpr bool value

Definition FormatVariadicDetails.h:71

SameType< Signature_format, &U::format > check

Definition FormatVariadicDetails.h:69

std::decay_t< T > Decayed

Definition FormatVariadicDetails.h:65

static auto test(int) -> std::is_same< decltype(std::declval< llvm::raw_ostream & >()<< std::declval< U >()), llvm::raw_ostream & >

const std::decay_t< T > & ConstRefT

Definition FormatVariadicDetails.h:78

static auto test(...) -> std::false_type

static constexpr bool value

Definition FormatVariadicDetails.h:88

void format(llvm::raw_ostream &S, StringRef Options) override

Definition FormatVariadicDetails.h:41

provider_format_adapter(T &&Item)

Definition FormatVariadicDetails.h:39

void format(llvm::raw_ostream &S, StringRef) override

Definition FormatVariadicDetails.h:54

stream_operator_format_adapter(T &&Item)

Definition FormatVariadicDetails.h:51

std::enable_if_t< uses_format_member< T >::value, T > build_format_adapter(T &&Item)

Definition FormatVariadicDetails.h:125

This is an optimization pass for GlobalISel generic memory operations.

typename detail::detector< void, Op, Args... >::value_t is_detected

Detects if a given trait holds for some set of arguments 'Args'.

Implement std::hash so that hash_code can be used in STL containers.