I ran into an error yesterday and, while it's easy to get around, I wanted to make sure that I'm understanding C++ right.

I have a base class with a protected member:

```
class Base
{
  protected:
    int b;
  public:
    void DoSomething(const Base& that)
    {
      b+=that.b;
    }
};

```

This compiles and works just fine. Now I extend Base but still want to use b:

```
class Derived : public Base
{
  protected:
    int d;
  public:
    void DoSomething(const Base& that)
    {
      b+=that.b;
      d=0;
    }
};

```

Note that in this case `DoSomething` is still taking a reference to a `Base`, not `Derived`. I would expect that I can still have access to `that.b` inside of `Derived`, but I get a `cannot access protected member` error (MSVC 8.0 - haven't tried gcc yet).

Obviously, adding a public getter on `b` solved the problem, but I was wondering why I couldn't have access directly to `b`. I though that when you use public inheritance the protected variables are still visible to the derived class.