Why does passing an object by value work even if that object has no copy constructor?
<p>According to <a href="http://stackoverflow.com/questions/665781/copy-constructor-in-c-is-called-when-object-is-returned-from-a-function">this question</a> a copy constructor is called when the object is passed by value into another function.</p>

<p>I removed my copy constructor as a test but can still pass it by value. Does this make sense?</p>

<p>I commented out the copy constructor:</p>

<pre><code> /*
Matrix4(const Matrix4&lt;T&gt;&amp; m)
{
    x.x = m.x.x; x.y = m.x.y; x.z = m.x.z; x.w = m.x.w;
    y.x = m.y.x; y.y = m.y.y; y.z = m.y.z; y.w = m.y.w;
    z.x = m.z.x; z.y = m.z.y; z.z = m.z.z; z.w = m.z.w;
    w.x = m.w.x; w.y = m.w.y; w.z = m.w.z; w.w = m.w.w;
}
 */

typedef Matrix4&lt;float&gt; mat4;
</code></pre>

<p>Then this compiles and runs fine:</p>

<pre><code>void ttt(mat4 hi){

}

void yyy(){
    mat4 x;
    ttt(x);
}
</code></pre>

<p>So perhaps the copy constructor is not called in such a case? What is happening here?</p>
