title: Eiffel: compilation error `Source of assignment is not compatible with target`
body: <p>With complete void check set in compiler I've got a Variable is not properly set compilation error on following case which for me is right (in my mind). It says that the source of assignment is not compatible with target. What am I missing here??? (<code>DB_SERVICE.load_from_primary_key...</code>) </p>
  
  <p><a href="https://i.stack.imgur.com/HYiMf.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/HYiMf.png" alt="enter image description here"></a></p>
  
  <h2>Class DB_SERVICE</h2>
  
  <pre><code>deferred class
      DB_SERVICE [G -&gt; DB_ENTITY create make_from_db_result end]
  
  inherit
      ACTION
          redefine
              start,
              execute
          end
  
      LOGGABLE
          rename
              make as make_from_loggable
          end
  
  feature -- Creation
  
      make (a_db_connection: attached DB_CONNECTION)
          require
              valid_db_connection: a_db_connection.is_connected
          do
              make_from_loggable
              db_connection := a_db_connection
              create last_items.make (100)
              create last_column_names.make_empty
          ensure
              db_connection_setted: a_db_connection = db_connection and db_connection.is_connected
          end
  
  feature -- Access
  
      item: detachable G
  
      db_connection: DB_CONNECTION
  
      last_items: HASH_TABLE[like item, INTEGER] -- content of last resultset
  
      last_column_names: ARRAY[STRING] -- Column names of last resultset
  
  feature -- status_report
  
  
      load_from_primary_key (primary_key: INTEGER)
              -- Loads given item into item otherwise item will be Void
          require
              attached db_connection.base_selection
          local
              l_db_result: DB_RESULT
          do
              if attached db_connection.base_selection as bs then
                  bs.query ("SELECT * FROM " + ({attached like item}).out + " WHERE " + {attached like item}.Primary_key_db_column_name + "=" + primary_key.out)
                  if bs.is_ok then
                      bs.load_result
                      create item.make_from_db_result(last_column_names, bs.cursor)
                  else
                      item := Void --HERE is the compiler complaining!
                      logger.write_critical ("Error while retreiving " + ({like item}).out + " from DB")
                  end
              else
                  item := Void 
                  logger.write_error ("base_selection is void")
              end
          end
  
  
  end -- class
  </code></pre>
  
  <h2>Class COMPANY_SERVICE</h2>
  
  <pre><code>class
      COMPANY_SERVICE
  
  inherit
      DB_SERVICE[COMPANY]
          redefine
              make
          end
  ...
  </code></pre>
  
  <h2>Class COMPANY</h2>
  
  <pre><code>class
      COMPANY
  
  inherit
      DB_ENTITY
          rename
              primary_key as id,
              set_primary_key as set_id,
              Primary_key_db_column_name as Id_db_column_name
          redefine
              make,
              make_from_db_result,
              out
          end
  
  create
      make,
      make_from_db_result
  
  ....
  </code></pre>