Hello everyone,


I think compiler is too strict in this case. You can see, no data member, no virtual function.

I am using Visual Studio 2008. The compiler error is simply because of Diamond pattern -- duplicate base class? Actually from logical point of view, there should be no ambiguity issue.

Any ideas?

Code:
#include <iostream>

using namespace std;

class Base {
public:
	int foo() {cout << "Base" << endl;}
};

class Derived1: public Base
{
public:
	int foo() {cout << "Derived1" << endl;}
};

class Derived2: public Base
{
public:
	int foo() {cout << "Derived2" << endl;}
};

class Final: public Derived1, public Derived2 {
public:
	int foo() {cout << "Final" << endl;}
};

int main()
{
	Final f;
	Final* p = &f;
	Base* pb = p; //error C2594: 'initializing' : ambiguous conversions from 'Final *' to 'Base *'
	return 0;
}

thanks in advance,
George