title: Design pattern for accessing non-const through a const intermediate
body: <p>Can someone suggest a better design for the situation where we want two objects to "talk" to each other through a <code>const</code> intermediate.</p>
  
  <p>Here is a contrived example, where two players trade lemons.
  A player finds another player in the "world", but the "world" should be <code>const</code>, since a player shouldn't be able to modify it (lets say by deleting walls).</p>
  
  <pre><code>void Player::give_lemon()
  {
      const World&amp; world = this-&gt;get_world();
  
      const Player&amp; other = world.get_nearest_player(*this);
  
      this-&gt;lemons--;
      other.lemons++; // error
  }
  </code></pre>
  
  <p>What designs do people use, a simple <code>const_cast</code> is easy but dirty.
  Or we could provide some way of "looking up" a non-const Player reference, lets say by having access to a non-const <code>player_list()</code> but here we'd be duplicating functionality already available in <code>World</code>, possibly less efficiently, all for a round-about way of doing a specific <code>const_cast</code>.</p>