So I have an abstract class (A) with a method that takes a parameter of type A and return a parameter of type A.

Now, I create a derived class say B. Now I want to override the method defined in A with the parameter and return type to be of type B. 

But when I try to do that, I get a compilation error stating that the pure virtual function was not implemented.

Both class A and B are template classes.

```
template<typename VALUE_TYPE>
class A {
  public:
      virtual A<VALUE_TYPE>* ola(const A& other) const = 0;
};

```

```
template  <class T>
class B : public A<T> {
    public:
        B<T>* ola(B<T>& other) {
            return new B<T>;
        }
};

```