accessing a protected member of a base class in other instances of a subclass
===

Why does this compile:

	class FooBase
	{
	protected:
	    void fooBase(void);
	};

	class Foo : public FooBase
	{
	public:
	    void foo(Foo& fooBar)
	    {
	        fooBar.fooBase();
	    }
	};

but this does not?

	class FooBase
	{
	protected:
	    void fooBase(void);
	};

	class Foo : public FooBase
	{
	public:
	    void foo(FooBase& fooBar)
	    {
	        fooBar.fooBase();
	    }
	};

On the one hand C++ grants access to private/protected members for all instances of that class, but on the other hand it does not grant access to protected members of a base class for all instances of a subclass.
This looks rather inconsistent to me.

I have tested compiling with Vc++ and with ideone.com and both compile the first but not the second code snippet.