Por que o membro protegido da superclasse não pode ser acessado em uma função de subclasse quando passado como argumento?

Eu recebo um erro de compilação, sobre o qual estou um pouco confuso. Isso está no VS2003.

erro C2248: 'A :: y': não é possível acessar o membro protegido declarado na classe 'A'

class A
{
public:
  A() : x(0), y(0) {}
protected:
  int x;
  int y;
};

class B : public A
{
public:
  B() : A(), z(0) {}
  B(const A& item) : A(), z(1) { x = item.y;}
private:
  int z;
};

O problema está em x = item.y;

O acesso é especificado como protegido. Por que o construtor da classe B não tem acesso a A :: y?

questionAnswers(3)

yourAnswerToTheQuestion