Como uma classe derivada pode usar um membro protegido da classe base?

Digamos que uma classe baseA define um membro protegido. Uma classe derivadaB usa este membro.

class A
{
public:
  A(int v) : value(v) { }

protected:
  int value;
};

class B : public A
{
public:
  B(int v) : A(v) { }
  void print() const;
  void compare_and_print(const A& other) const;
};

A funçãoB::print apenas pega o valor do membro atual e o imprime:

void B::print() const
{
  std::cout << "Value: " << value << "\n";
}

A outra função membro,B::compare_and_print, toma uma instância deA, verifica seus valores e imprime o máximo de ambos:

void B::compare_and_print(const A& other) const
{
  auto max_value = std::max(value, other.value);
  std::cout << "Max value: " << max_value << "\n";
}

E seother foram uma instância da classeB, isso não seria problema. Mas a função gostaria de trabalhar com qualquer tipo deA instâncias. Infelizmente, isso não é compilado. Isto é o que clang diz sobre isso:

test.cpp:27:42: error: 'value' is a protected member of 'A'
  auto max_value = std::max(value, other.value);
                                         ^
test.cpp:9:7: note: can only access this member on an object of type 'B'
  int value;
      ^
1 error generated.

Essa restrição parece contra-intuitiva para mim. No entanto, não vou contestar o padrão C ++ sobre isso (no entanto, estou interessado na lógica por trás dessa decisão).

Meu problema é que, no meu projeto, eu realmente tenho esse tipo de caso de uso: Uma classe derivada possui um método que utiliza uma instância da classe base e precisa acessar um membro protegido do objeto recebido.

A solução mais fácil, a que eu implementei atualmente, é adicionar uma função de membro pública à classe base, que retorna o membro protegido. Esta solução não me satisfaz completamente porque gostaria de evitar a exportação do membro dessa maneira.

Como posso ativar o uso do membro protegido da classe base pela classe derivada sem exportar o membro por meio da API?

EDIT: Algumas perguntas relacionadas são:

Acessando membros protegidos em uma classe derivadaComo acessar membros protegidos em uma classe derivada?

A resposta que eu gostaria de ter é a explicação de um padrão de design para resolver esse problema sem expor o membro protegido ao código externo (em queexterno significa código que não faz parte da estrutura que define essas classes).

Pode ser que esse padrão não possa existir, eu reconheço.

questionAnswers(2)

yourAnswerToTheQuestion