title: explicit copy constructor compile error
body: <p>I was checking operator overloading in C++ and came across something I did not expect and have some doubts about it.</p>
  
  <p>My copy constructor is declared and implemented as as</p>
  
  <pre><code>explicit Vector(const Vector&amp; v);
  
  Vector::Vector(const Vector&amp; v) :
  _x(v._x), _y(v._y), _z(v._z) {}
  </code></pre>
  
  <p>then I am overloading the compound assignment operators</p>
  
  <pre><code>Vector Vector::operator+(const Vector&amp; v) const
  {
      Vector tmp(*this);
      tmp += v;
      return tmp;
  }
  
  Vector Vector::operator-(const Vector&amp; v) const
  {
      Vector tmp(*this);
      tmp -= v;
      return tmp;
  }
  </code></pre>
  
  <p>however, in the <code>return</code> statements I got an error saying <code>no matching constructor for initialization of 'Vector'</code>.</p>
  
  <p>Since the only thing I added to my constructor was the <code>explicit</code> keyword, I deleted it and the code compiles just fine, why?</p>
  
  <p>I also was checking new stuff from C++11 and occurred that I can declare my constructor like a moving-constructor</p>
  
  <pre><code>explicit Vector(const Vector&amp;&amp; v);
  </code></pre>
  
  <p>and the code compiles just fine. If I do that, do I have to have both copy and move constructors?</p>
  
  <pre><code>explicit Vector(const Vector&amp; v);
  explicit Vector(const Vector&amp;&amp; v);
  </code></pre>
  
  <p>or just having the move constructor will work fine? If I want to stick to C++11, what is the correct approach to follow?</p>