duh!
i had to do this in derived class, and it works now!
Code:
class derived : public base
{
public:
// this solves the problem
	using base::foo;
	void foo(const string& msg) { cout << "derived: " << msg << endl; }
};
and i am not very happy about this although it works fine now!