I have a "wrapper" template that looks like this:

```
template <typename T>
class Wrapper {
  virtual T* get() = 0;
}

```

Then I have the following inheritance scheme:

```
class A {
  // things
}

class B : public A {
  // more things
}

```

I have another class that uses that wrapper:

```
class Worker {
  void work(Wrapper<A>* wa){
    A* a = wa->get();
    //do stuff with a.
  }
}

```

All that can be done with `A*`, can be done with `B*`, but i cannot pass a `Wrapper<B>*` as a `Wrapper<A>*` to Worker. Is there a way to allow this?

I have read about C++ concepts, but I don't see how they might solve the problem.