reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced

References

include/llvm/ADT/Hashing.h
  363 typename std::enable_if<is_hashable_data<T>::value, T>::type
  363 typename std::enable_if<is_hashable_data<T>::value, T>::type
  364 get_hashable_data(const T &value) {
  385 bool store_and_advance(char *&buffer_ptr, char *buffer_end, const T& value,
  514   char *combine_data(size_t &length, char *buffer_ptr, char *buffer_end, T data) {
  554                     const T &arg, const Ts &...args) {
  600 template <typename ...Ts> hash_code hash_combine(const Ts &...args) {
include/llvm/ADT/Optional.h
  144     T value;
  160   explicit OptionalStorage(in_place_t, Args &&... args)
  172   T &getValue() LLVM_LVALUE_FUNCTION noexcept {
  176   T const &getValue() const LLVM_LVALUE_FUNCTION noexcept {
  181   T &&getValue() && noexcept {
  197       ::new ((void *)std::addressof(value)) T(y);
  216   optional_detail::OptionalStorage<T> Storage;
  219   using value_type = T;
  224   Optional(const T &y) : Storage(optional_detail::in_place_t{}, y) {}
  227   Optional(T &&y) : Storage(optional_detail::in_place_t{}, std::move(y)) {}
  230   Optional &operator=(T &&y) {
  241   static inline Optional create(const T *y) {
  245   Optional &operator=(const T &y) {
  253   const T *getPointer() const { return &Storage.getValue(); }
  254   T *getPointer() { return &Storage.getValue(); }
  255   const T &getValue() const LLVM_LVALUE_FUNCTION { return Storage.getValue(); }
  256   T &getValue() LLVM_LVALUE_FUNCTION { return Storage.getValue(); }
  260   const T *operator->() const { return getPointer(); }
  261   T *operator->() { return getPointer(); }
  262   const T &operator*() const LLVM_LVALUE_FUNCTION { return getValue(); }
  263   T &operator*() LLVM_LVALUE_FUNCTION { return getValue(); }
  266   constexpr T getValueOr(U &&value) const LLVM_LVALUE_FUNCTION {
  271   T &&getValue() && { return std::move(Storage.getValue()); }
  272   T &&operator*() && { return std::move(Storage.getValue()); }
  275   T getValueOr(U &&value) && {
include/llvm/Analysis/IVDescriptors.h
  334   Instruction::BinaryOps getInductionOpcode() const {
include/llvm/Analysis/ScalarEvolutionExpander.h
  332     Value *InsertBinop(Instruction::BinaryOps Opcode, Value *LHS, Value *RHS,
include/llvm/Analysis/TargetFolder.h
  107   Constant *CreateBinOp(Instruction::BinaryOps Opc,
include/llvm/FuzzMutate/Operations.h
   37 OpDescriptor binOpDescriptor(unsigned Weight, Instruction::BinaryOps Op);
include/llvm/IR/ConstantFolder.h
  115   Constant *CreateBinOp(Instruction::BinaryOps Opc,
include/llvm/IR/ConstantRange.h
  143   static ConstantRange makeGuaranteedNoWrapRegion(Instruction::BinaryOps BinOp,
  149   static ConstantRange makeExactNoWrapRegion(Instruction::BinaryOps BinOp,
  326   ConstantRange binaryOp(Instruction::BinaryOps BinOp,
  333   ConstantRange overflowingBinaryOp(Instruction::BinaryOps BinOp,
include/llvm/IR/IRBuilder.h
 1073   BinaryOperator *CreateInsertNUWNSWBinOp(BinaryOperator::BinaryOps Opc,
 1093   Value *foldConstant(Instruction::BinaryOps Opc, Value *L,
 1473   Value *CreateBinOp(Instruction::BinaryOps Opc,
include/llvm/IR/InstrTypes.h
  192   BinaryOperator(BinaryOps iType, Value *S1, Value *S2, Type *Ty,
  194   BinaryOperator(BinaryOps iType, Value *S1, Value *S2, Type *Ty,
  216   static BinaryOperator *Create(BinaryOps Op, Value *S1, Value *S2,
  224   static BinaryOperator *Create(BinaryOps Op, Value *S1, Value *S2,
  249   static BinaryOperator *CreateWithCopiedFlags(BinaryOps Opc,
  289   static BinaryOperator *CreateNSW(BinaryOps Opc, Value *V1, Value *V2,
  295   static BinaryOperator *CreateNSW(BinaryOps Opc, Value *V1, Value *V2,
  301   static BinaryOperator *CreateNSW(BinaryOps Opc, Value *V1, Value *V2,
  308   static BinaryOperator *CreateNUW(BinaryOps Opc, Value *V1, Value *V2,
  314   static BinaryOperator *CreateNUW(BinaryOps Opc, Value *V1, Value *V2,
  320   static BinaryOperator *CreateNUW(BinaryOps Opc, Value *V1, Value *V2,
  327   static BinaryOperator *CreateExact(BinaryOps Opc, Value *V1, Value *V2,
  333   static BinaryOperator *CreateExact(BinaryOps Opc, Value *V1, Value *V2,
  339   static BinaryOperator *CreateExact(BinaryOps Opc, Value *V1, Value *V2,
  402   BinaryOps getOpcode() const {
include/llvm/IR/IntrinsicInst.h
  326     Instruction::BinaryOps getBinaryOp() const;
include/llvm/IR/NoFolder.h
  173   Instruction *CreateBinOp(Instruction::BinaryOps Opc,
include/llvm/Support/type_traits.h
   31   using UnderlyingT = typename std::remove_reference<T>::type;
   91     T t;
  122     static auto get(F*) -> decltype(std::declval<F &>() = std::declval<const F &>(), std::true_type{});
  122     static auto get(F*) -> decltype(std::declval<F &>() = std::declval<const F &>(), std::true_type{});
  122     static auto get(F*) -> decltype(std::declval<F &>() = std::declval<const F &>(), std::true_type{});
  130     static auto get(F*) -> decltype(std::declval<F &>() = std::declval<F &&>(), std::true_type{});
  130     static auto get(F*) -> decltype(std::declval<F &>() = std::declval<F &&>(), std::true_type{});
  130     static auto get(F*) -> decltype(std::declval<F &>() = std::declval<F &&>(), std::true_type{});
  145       std::is_copy_constructible<detail::trivial_helper<T>>::value;
  147       !std::is_copy_constructible<T>::value;
  151       std::is_move_constructible<detail::trivial_helper<T>>::value;
  153       !std::is_move_constructible<T>::value;
  157       is_copy_assignable<detail::trivial_helper<T>>::value;
  159       !is_copy_assignable<T>::value;
  163       is_move_assignable<detail::trivial_helper<T>>::value;
  165       !is_move_assignable<T>::value;
  169       std::is_destructible<detail::trivial_helper<T>>::value;
lib/Analysis/InstructionSimplify.cpp
   74   BinaryOperator::BinaryOps BinOpCode;
  171 static Value *ExpandBinOp(Instruction::BinaryOps Opcode, Value *LHS, Value *RHS,
  172                           Instruction::BinaryOps OpcodeToExpand,
  229 static Value *SimplifyAssociativeBinOp(Instruction::BinaryOps Opcode,
  329 static Value *ThreadBinOpOverSelect(Instruction::BinaryOps Opcode, Value *LHS,
  483 static Value *ThreadBinOpOverPHI(Instruction::BinaryOps Opcode, Value *LHS,
  560 static Constant *foldOrCommuteConstant(Instruction::BinaryOps Opcode,
 1008 static Value *simplifyDiv(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1,
 1066 static Value *simplifyRem(Instruction::BinaryOps Opcode, Value *Op0, Value *Op1,
 1195 static Value *SimplifyShift(Instruction::BinaryOps Opcode, Value *Op0,
 1245 static Value *SimplifyRightShift(Instruction::BinaryOps Opcode, Value *Op0,
lib/Analysis/ScalarEvolution.cpp
 2368     auto Opcode = [&] {
 4554     Instruction::BinaryOps BinOp = WO->getBinaryOp();
 7610     Optional<Instruction::BinaryOps> PostShiftOpCode;
 7613       Instruction::BinaryOps OpC;
 7652   Instruction::BinaryOps OpCode;
lib/Analysis/ScalarEvolutionExpander.cpp
  169 Value *SCEVExpander::InsertBinop(Instruction::BinaryOps Opcode,
lib/CodeGen/CodeGenPrepare.cpp
 5922   BinaryOperator::BinaryOps Opcode = Shift->getOpcode();
lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
 2074                                                Instruction::BinaryOps Opc,
 2263     Instruction::BinaryOps Opcode = BOp->getOpcode();
lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h
  528                             Instruction::BinaryOps Opc, BranchProbability TProb,
lib/FuzzMutate/Operations.cpp
   92                                              Instruction::BinaryOps Op) {
lib/IR/ConstantRange.cpp
  225 ConstantRange::makeGuaranteedNoWrapRegion(Instruction::BinaryOps BinOp,
  296 ConstantRange ConstantRange::makeExactNoWrapRegion(Instruction::BinaryOps BinOp,
  776 ConstantRange ConstantRange::binaryOp(Instruction::BinaryOps BinOp,
  819 ConstantRange ConstantRange::overflowingBinaryOp(Instruction::BinaryOps BinOp,
lib/IR/Instructions.cpp
 2244 BinaryOperator::BinaryOperator(BinaryOps iType, Value *S1, Value *S2,
 2257 BinaryOperator::BinaryOperator(BinaryOps iType, Value *S1, Value *S2,
 2338 BinaryOperator *BinaryOperator::Create(BinaryOps Op, Value *S1, Value *S2,
 2346 BinaryOperator *BinaryOperator::Create(BinaryOps Op, Value *S1, Value *S2,
lib/IR/IntrinsicInst.cpp
  226 Instruction::BinaryOps BinaryOpIntrinsic::getBinaryOp() const {
lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp
  742   Instruction::BinaryOps Opc = I.getOpcode();
  894   Instruction::BinaryOps Opc = I.getOpcode();
lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp
 1632       Instruction::BinaryOps Op = BO->getOpcode();
lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
 1415   Instruction::BinaryOps Opcode = BO.getOpcode();
 1460   auto Opcode = I.getOpcode();
 1502   auto LogicOpc = Logic.getOpcode();
 1536   auto LogicOpc = I.getOpcode();
 1707   Instruction::BinaryOps Opc = cast<BinaryOperator>(Op0)->getOpcode();
 1791       BinaryOperator::BinaryOps BinOp = cast<BinaryOperator>(Op0)->getOpcode();
 2047   BinaryOperator::BinaryOps ShiftOpcode0 = Or0->getOpcode();
 2048   BinaryOperator::BinaryOps ShiftOpcode1 = Or1->getOpcode();
lib/Transforms/InstCombine/InstCombineCalls.cpp
 1531     Optional<Instruction::BinaryOps> BinaryOp;
 1545     SimplifyAction(Instruction::BinaryOps BinaryOp, FtzRequirementTy FtzReq)
lib/Transforms/InstCombine/InstCombineCasts.cpp
  518   auto ShiftOpcode0 = cast<BinaryOperator>(Or0)->getOpcode();
  519   auto ShiftOpcode1 = cast<BinaryOperator>(Or1)->getOpcode();
lib/Transforms/InstCombine/InstCombineCompares.cpp
 1919     auto BOpc = Pred == CmpInst::ICMP_EQ ? Instruction::And : Instruction::Or;
 1932     auto BOpc = Pred == CmpInst::ICMP_EQ ? Instruction::And : Instruction::Or;
 3588   Value *T0 = XShiftOpcode == Instruction::BinaryOps::LShr
 4434 static bool isNeutralValue(Instruction::BinaryOps BinaryOp, Value *RHS) {
 4447     Instruction::BinaryOps BinaryOp, bool IsSigned,
 4471     Instruction::BinaryOps BinaryOp, bool IsSigned, Value *LHS, Value *RHS,
lib/Transforms/InstCombine/InstCombineInternal.h
  246       BinaryOperator::BinaryOps Opcode, Constant *In, bool IsRHSConstant) {
  498   bool OptimizeOverflowCheck(Instruction::BinaryOps BinaryOp, bool IsSigned,
  585   bool willNotOverflow(BinaryOperator::BinaryOps Opcode, const Value *LHS,
  785       Instruction::BinaryOps BinaryOp, bool IsSigned,
  819   Value *tryFactorization(BinaryOperator &, Instruction::BinaryOps, Value *,
lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
  322       auto RemOpc = Div->getOpcode() == Instruction::UDiv ? Instruction::URem
  921   Instruction::BinaryOps Opcode = I.getOpcode();
lib/Transforms/InstCombine/InstCombineSelect.cpp
 2152   auto ShiftOpcode0 = cast<BinaryOperator>(Or0)->getOpcode();
 2153   auto ShiftOpcode1 = cast<BinaryOperator>(Or1)->getOpcode();
lib/Transforms/InstCombine/InstCombineShifts.cpp
   70   Instruction::BinaryOps ShiftOpcode = Sh0->getOpcode();
  122     if (ShiftOpcode == Instruction::BinaryOps::Shl) {
lib/Transforms/InstCombine/InstCombineVectorOps.cpp
 1430   BinaryOperator::BinaryOps Opcode;
 1433   BinopElts(BinaryOperator::BinaryOps Opc = (BinaryOperator::BinaryOps)0,
 1488   BinaryOperator::BinaryOps BOpcode = BO->getOpcode();
 1593   BinaryOperator::BinaryOps Opc0 = B0->getOpcode();
 1594   BinaryOperator::BinaryOps Opc1 = B1->getOpcode();
 1617   BinaryOperator::BinaryOps BOpc = Opc0;
lib/Transforms/InstCombine/InstructionCombining.cpp
  209   Instruction::BinaryOps Opcode = I.getOpcode();
  269   auto AssocOpcode = BinOp1->getOpcode();
  314   Instruction::BinaryOps Opcode = I.getOpcode();
  473 static bool leftDistributesOverRight(Instruction::BinaryOps LOp,
  474                                      Instruction::BinaryOps ROp) {
  494 static bool rightDistributesOverLeft(Instruction::BinaryOps LOp,
  495                                      Instruction::BinaryOps ROp) {
  509 static Value *getIdentityValue(Instruction::BinaryOps Opcode, Value *V) {
  521 static Instruction::BinaryOps
  522 getBinOpsForFactorization(Instruction::BinaryOps TopOpcode, BinaryOperator *Op,
  542                                       Instruction::BinaryOps InnerOpcode,
  549   Instruction::BinaryOps TopLevelOpcode = I.getOpcode();
  650   Instruction::BinaryOps TopLevelOpcode = I.getOpcode();
  655     Instruction::BinaryOps LHSOpcode, RHSOpcode;
  687     Instruction::BinaryOps InnerOpcode = Op0->getOpcode(); // op'
  724     Instruction::BinaryOps InnerOpcode = Op1->getOpcode(); // op'
  762   Instruction::BinaryOps Opcode = I.getOpcode();
 1405   BinaryOperator::BinaryOps Opcode = Inst.getOpcode();
 2713         Instruction::BinaryOps BinOp = WO->getBinaryOp();
lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
  444 static void setDeducedOverflowingFlags(Value *V, Instruction::BinaryOps Opcode,
  496   Instruction::BinaryOps Opcode = WO->getBinaryOp();
  519   Instruction::BinaryOps Opcode = SI->getBinaryOp();
  756   Instruction::BinaryOps Opcode = BinOp->getOpcode();
lib/Transforms/Scalar/Float2Int.cpp
  110 static Instruction::BinaryOps mapBinOpcode(unsigned Opcode) {
  268         auto BinOp = (Instruction::BinaryOps) I->getOpcode();
lib/Transforms/Scalar/SeparateConstOffsetFromGEP.cpp
  707   BinaryOperator::BinaryOps NewOp = BO->getOpcode();
lib/Transforms/Utils/SimplifyCFG.cpp
 2683     Instruction::BinaryOps Opc = Instruction::BinaryOpsEnd;
lib/Transforms/Utils/SimplifyIndVar.cpp
  405 static bool willNotOverflow(ScalarEvolution *SE, Instruction::BinaryOps BinOp,
lib/Transforms/Vectorize/LoopVectorizationPlanner.h
  134     return createInstruction(Instruction::BinaryOps::And, {LHS, RHS});
  138     return createInstruction(Instruction::BinaryOps::Or, {LHS, RHS});
lib/Transforms/Vectorize/LoopVectorize.cpp
  558                                Instruction::BinaryOps Opcode =
  785                        Instruction::BinaryOps Opcode =
 1696   Instruction::BinaryOps AddOp;
 1697   Instruction::BinaryOps MulOp;
 1892                                           Instruction::BinaryOps BinOp) {
 1960   Instruction::BinaryOps AddOp;
 1961   Instruction::BinaryOps MulOp;
 6564                                         Instruction::BinaryOps BinOp) {
tools/clang/lib/CodeGen/CGAtomic.cpp
  497   llvm::Instruction::BinaryOps PostOp = (llvm::Instruction::BinaryOps)0;
  993     llvm::Instruction::BinaryOps PostOp = (llvm::Instruction::BinaryOps)0;
tools/clang/lib/CodeGen/CGBuiltin.cpp
  179                                    Instruction::BinaryOps Op,
 9583 static Value *EmitX86MaskLogic(CodeGenFunction &CGF, Instruction::BinaryOps Opc,
tools/clang/lib/CodeGen/CGExprScalar.cpp
 2386       llvm::Instruction::BinaryOps op = isInc ? llvm::Instruction::Add :
tools/clang/lib/CodeGen/ItaniumCXXABI.cpp
 1048   llvm::Instruction::BinaryOps And, Or;
tools/clang/lib/CodeGen/MicrosoftCXXABI.cpp
 2826   llvm::Instruction::BinaryOps And, Or;
tools/llvm-stress/llvm-stress.cpp
  391     Instruction::BinaryOps Op;
tools/polly/include/polly/CodeGen/IslExprBuilder.h
  231   llvm::Value *createBinOp(llvm::BinaryOperator::BinaryOps Opc,
tools/polly/lib/Analysis/ScopBuilder.cpp
  457     auto Opcode = BinOp->getOpcode();
tools/polly/lib/Analysis/ScopDetection.cpp
  564     auto Opcode = BinOp->getOpcode();
tools/polly/lib/CodeGen/IslExprBuilder.cpp
   99 Value *IslExprBuilder::createBinOp(BinaryOperator::BinaryOps Opc, Value *LHS,
tools/polly/lib/Support/SCEVValidator.cpp
  684     auto Opcode = BinOp->getOpcode();
unittests/IR/ConstantRangeTest.cpp
 1600 void TestNoWrapRegionExhaustive(Instruction::BinaryOps BinOp,
usr/include/c++/7.4.0/bits/move.h
   46     inline _GLIBCXX_CONSTEXPR _Tp*
   47     __addressof(_Tp& __r) _GLIBCXX_NOEXCEPT
   72     constexpr _Tp&&
   83     constexpr _Tp&&
  136     inline _GLIBCXX17_CONSTEXPR _Tp*
  137     addressof(_Tp& __r) noexcept
  143     const _Tp* addressof(const _Tp&&) = delete;
  143     const _Tp* addressof(const _Tp&&) = delete;
usr/include/c++/7.4.0/type_traits
  215     : public __is_void_helper<typename remove_cv<_Tp>::type>::type
  326     : public __is_integral_helper<typename remove_cv<_Tp>::type>::type
  354     : public __is_floating_point_helper<typename remove_cv<_Tp>::type>::type
  381     : public __is_pointer_helper<typename remove_cv<_Tp>::type>::type
  581     : public __or_<is_lvalue_reference<_Tp>,
  582                    is_rvalue_reference<_Tp>>::type
  588     : public __or_<is_integral<_Tp>, is_floating_point<_Tp>>::type
  588     : public __or_<is_integral<_Tp>, is_floating_point<_Tp>>::type
  601     : public __not_<__or_<is_function<_Tp>, is_reference<_Tp>,
  601     : public __not_<__or_<is_function<_Tp>, is_reference<_Tp>,
  602                           is_void<_Tp>>>::type
  611     : public __or_<is_arithmetic<_Tp>, is_enum<_Tp>, is_pointer<_Tp>,
  611     : public __or_<is_arithmetic<_Tp>, is_enum<_Tp>, is_pointer<_Tp>,
  611     : public __or_<is_arithmetic<_Tp>, is_enum<_Tp>, is_pointer<_Tp>,
  612                    is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type
  612                    is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type
  638     : public __or_<is_object<_Tp>, is_reference<_Tp>>::type
  638     : public __or_<is_object<_Tp>, is_reference<_Tp>>::type
  762     typename add_rvalue_reference<_Tp>::type declval() noexcept;
  777     : public __and_<is_array<_Tp>, __not_<extent<_Tp>>>
  777     : public __and_<is_array<_Tp>, __not_<extent<_Tp>>>
  825     : public __is_destructible_safe<_Tp>::type
  984       typedef decltype(__test<_Tp, _Arg>(0)) type;
  989     : public __and_<is_destructible<_Tp>,
  990                     __is_direct_constructible_impl<_Tp, _Arg>>
 1072 			 __is_direct_constructible_ref_cast<_Tp, _Arg>,
 1073 			 __is_direct_constructible_new_safe<_Tp, _Arg>
 1079     : public __is_direct_constructible_new<_Tp, _Arg>::type
 1119     : public __is_direct_constructible<_Tp, _Arg>
 1130     : public __is_constructible_impl<_Tp, _Args...>::type
 1142     : public is_constructible<_Tp, const _Tp&>
 1142     : public is_constructible<_Tp, const _Tp&>
 1148     : public __is_copy_constructible_impl<_Tp>
 1160     : public is_constructible<_Tp, _Tp&&>
 1160     : public is_constructible<_Tp, _Tp&&>
 1166     : public __is_move_constructible_impl<_Tp>
 1538       typedef decltype(__test<_From, _To>(0)) type;
 1545     : public __is_convertible_helper<_From, _To>::type
 1554     { typedef _Tp     type; };
 1563     { typedef _Tp     type; };
 1574       remove_const<typename remove_volatile<_Tp>::type>::type     type;
 1629     { typedef _Tp   type; };
 1659     { typedef _Tp&&   type; };
 1664     : public __add_rvalue_reference_helper<_Tp>
 2157     { typedef _Tp type; };
utils/unittest/googletest/include/gtest/gtest-printers.h
  223 void DefaultPrintNonContainerTo(const T& value, ::std::ostream* os) {
  276   static ::std::string Format(const ToPrint& value) {
  351     const T1& value, const T2& /* other_operand */) {
  351     const T1& value, const T2& /* other_operand */) {
  352   return FormatForComparison<T1, T2>::Format(value);
  352   return FormatForComparison<T1, T2>::Format(value);
  366 void UniversalPrint(const T& value, ::std::ostream* os);
  373                     const C& container, ::std::ostream* os) {
  439                     const T& value, ::std::ostream* os) {
  455 void PrintTo(const T& value, ::std::ostream* os) {
  478   DefaultPrintTo(IsContainerTest<T>(0), is_pointer<T>(), value, os);
  699   static void Print(const T& value, ::std::ostream* os) {
  784   static void Print(const T& value, ::std::ostream* os) {
  856   typedef T T1;
  983   internal::UniversalTersePrinter<T>::Print(value, &ss);
utils/unittest/googletest/include/gtest/gtest.h
 1377                                    const T1& lhs, const T2& rhs) {
 1377                                    const T1& lhs, const T2& rhs) {
 1389                             const T1& lhs,
 1390                             const T2& rhs) {
 1419                                  const T1& lhs,
 1420                                  const T2& rhs) {
utils/unittest/googletest/include/gtest/internal/custom/raw-ostream.h
   35 auto printable(const T &V) -> decltype(StreamSwitch<T>::printable(V)) {
   35 auto printable(const T &V) -> decltype(StreamSwitch<T>::printable(V)) {
   37   return StreamSwitch<T>::printable(V);
   54   const T& V;
   55   friend std::ostream &operator<<(std::ostream &S, const RawStreamProxy<T> &V) {
   69   static const RawStreamProxy<T> printable(const T &V) { return {V}; }
   69   static const RawStreamProxy<T> printable(const T &V) { return {V}; }
utils/unittest/googletest/include/gtest/internal/gtest-internal.h
   94 ::std::string PrintToString(const T& value);