NFC: Replace typelist_contains with llvm::is_one_of. This should also fix weird build...
authorRiver Riddle <riverriddle@google.com>
Fri, 7 Jun 2019 04:39:36 +0000 (21:39 -0700)
committerMehdi Amini <joker.eph@gmail.com>
Sun, 9 Jun 2019 23:22:49 +0000 (16:22 -0700)
PiperOrigin-RevId: 251987621

mlir/include/mlir/IR/OpDefinition.h

index c4257f0..868d3ea 100644 (file)
@@ -38,16 +38,6 @@ namespace OpTrait {
 template <typename ConcreteType> class OneResult;
 }
 
-/// This type trait produces true if the specified type is in the specified
-/// type list.
-template <typename same, typename first, typename... more>
-struct typelist_contains {
-  static const bool value = std::is_same<same, first>::value ||
-                            typelist_contains<same, more...>::value;
-};
-template <typename same, typename first>
-struct typelist_contains<same, first> : std::is_same<same, first> {};
-
 /// This class represents success/failure for operation parsing. It is
 /// essentially a simple wrapper class around LogicalResult that allows for
 /// explicit conversion to bool. This allows for the parser to chain together
@@ -766,16 +756,14 @@ public:
 template <typename ConcreteType, template <typename T> class... Traits>
 class Op : public OpState,
            public Traits<ConcreteType>...,
-           public FoldingHook<
-               ConcreteType,
-               typelist_contains<OpTrait::OneResult<ConcreteType>, OpState,
-                                 Traits<ConcreteType>...>::value> {
+           public FoldingHook<ConcreteType,
+                              llvm::is_one_of<OpTrait::OneResult<ConcreteType>,
+                                              Traits<ConcreteType>...>::value> {
 public:
   /// Return if this operation contains the provided trait.
   template <template <typename T> class Trait>
   static constexpr bool hasTrait() {
-    return typelist_contains<Trait<ConcreteType>, OpState,
-                             Traits<ConcreteType>...>::value;
+    return llvm::is_one_of<Trait<ConcreteType>, Traits<ConcreteType>...>::value;
   }
 
   /// Return the operation that this refers to.