title: "More than one operator>> matches these operands. Operand types are: std::ifstream&>>size_t"
body: <p>I have a "Serializable" interface class, that has </p>
  
  <pre><code>struct Serializable {
      virtual void write(std::ostream&amp; os = std::cout) const = 0;
      virtual void read(std::istream&amp; is = std::cin) = 0;
  };
  </code></pre>
  
  <p>so that the derivates' implementations can have a simple form like:</p>
  
  <pre><code>void write(std::ostream&amp; os = std::cout) {os&lt;&lt;*this}
  void read(std::istream&amp; is = std::cin) {is&gt;&gt;*this}
  </code></pre>
  
  <p>that work on all kinds of ostream objects by having the operators in question overloaded by the appropriate iostream derivates like:</p>
  
  <pre><code>std::istream&amp; operator&gt;&gt;(std::istream&amp; is, Vec2D&amp; rhs_vec) {...}
  </code></pre>
  
  <p>and:</p>
  
  <pre><code>//I.
  std::ifstream&amp; operator&gt;&gt;(std::ifstream&amp; ifs, Vec2D&amp; rhs_vec) {...}
  //intellisense thinks the above line is an overload for 
  //std::ifstream&amp;&gt;&gt;size_t
  </code></pre>
  
  <p>or:</p>
  
  <pre><code>std::ifstream&amp; operator&gt;&gt;(std::ifstream ifs, Document&lt;Shape&gt;&amp; document) 
  {
      size_t siz;
      ifs &gt;&gt; siz; //II. the &gt;&gt; is red curly underlined by intellisense
      document.setCapacity(siz);
      ...
  }
  </code></pre>
  
  <p>The line marked by the comment II. is where I get the intellisense error I wrote in the title, mentioning the definition marked by comment I. among 2 other similar definitions as possible overloads for std::ifstream&amp;>>size_t.</p>
  
  <p>How on earth is it (or are these) overloards for std::ifstream&amp;>>size_t, when they are clearly not?</p>
  
  <p>Is there something fundamentally wrong with my design, or is it just some intellisense madness?</p>