```
#include <vector>

class Base
{
public:
    virtual void foo() = 0;
};

template<typename Bar>
class Cloud : public Base
{
public:
    void foo()
    {
    }
};

class Water
{
};

int main()
{
    Cloud<Water> cloud;
    std::vector<Base> stuff;
    stuff.push_back(cloud);
}

```

The above shown code fails with the following on MSVC 14.1:

```
error C2259: 'Base': cannot instantiate abstract class
note: due to following members:
note: 'void Base::foo(void)': is abstract

```

Why does `Base::foo()` remain abstract even though `Cloud` implements it?  

How would I implement this in a way that `Cloud` still derives from `Base`, overrides `foo()` and remains templated with `typename Bar`?