/* { dg-do run } */

namespace FOO {

template <typename T>
class A
{
public:
    void Enum();
    virtual void OnProv() = 0;
    virtual ~A() { }
};
typedef A<char> B;

template<typename T>
void A<T>::Enum ()
{
    OnProv ();
}
} // namespace FOO

class C {};

class D: public C, public FOO::B {
public:
    void OnProv() {}
};

int main(int argc, char *argv[])
{
    D x;
    x.Enum();
    return 0;
}