template<typename ConcreteType, typename Traits>
template<typename ConcreteOp>
struct mlir::OpInterface< ConcreteType, Traits >::Trait< ConcreteOp >
This is a special trait that registers a given interface with an operation.
template<typename ConcreteType , typename Traits >
template<typename ConcreteOp >
Provide an accessor to a static instance of the interface model for the concrete operation type. The implementation is inspired from Sean Parent's concept-based polymorphism. A key difference is that the set of classes erased is statically known, which alleviates the need for using dynamic memory allocation. We use a zero-sized templated class Model<ConcreteOp>
to emit the virtual table and generate a singleton object for each instantiation of this class.