message: Fix example in OpInterfaces documentation
  The concept-based polymorphism structure was missing an inheritance link
  between the concept and the model. The interface class did not re-export the
  base class constructor, which made it unusable with llvm::isa calls. Fix these
  and reformat the code around.
diff: @@ -133,7 +133,7 @@ struct Concept {
  /// Define a model class that specializes a concept on a given operation type.
  template <typename OpT>
  -struct Model {
  + struct Model : public Concept {
  /// Override the method to dispatch on the concrete operation.
  unsigned getNumInputs(Operation *op) final {
  return llvm::cast<OpT>(op).getNumInputs();
  @@ -144,6 +144,9 @@ struct Model {
  class ExampleOpInterface : public OpInterface<ExampleOpInterface,
  ExampleOpInterfaceTraits> {
  public:
  + /// Use base class constructor to support LLVM-style casts.
  + using OpInterface<ExampleOpInterface, ExampleOpInterfaceTraits>::OpInterface;
  +
  /// The interface dispatches to 'getImpl()', an instance of the concept.
  unsigned getNumInputs() {
  return getImpl()->getNumInputs(getOperation());
  