title: Enforce assignment operator instead of copy constructor on initialization?
body: <p>I'm putting together my own (silly) Scalars/List/Hash (perl-like..) thing in C++.</p>
  
  <p>I've come across a point having to dereference a Scalar into a List, and it does not work when attempted in initialization.</p>
  
  <p><code>List</code> several default constructors, out of which 5 range from <code>List()</code> to <code>List(Scalar, Scalar, Scalar, Scalar)</code>.</p>
  
  <pre><code>List stuff(1, 2, 3);
  Scalar aref = stuff; // List overloads the (Scalar) cast operator
  
  // the following line is the unwanted thing..
  List failist = aref; // uses List::List(Scalar), so same as `List failist(aref);`
  
  // however, these work
  List thisworks;
  thisworks = aref;
  thisworks.operator=(aref);
  </code></pre>
  
  <p>List header:</p>
  
  <pre><code>class List : public Thing {
      std::vector&lt;Scalar&gt; stuff;
  public:
      List();
      List(Scalar s1); // this gets called because initialization
      List(Scalar s1, Scalar s2);
      List(Scalar s1, Scalar s2, Scalar s3);
      List(Scalar s1, Scalar s2, Scalar s3, Scalar s4);
      List &amp;operator=(const Scalar &amp;other); // but i want this
  
      /* some getters/setters cut away */
  
      operator Scalar();
  };
  </code></pre>
  
  <p>I'd really like to use <code>List mylist = listreference;</code>, how do I ?</p>