title: How are C++ array members handled in copy control functions?
body: <p>This is something I have wondered for a long time. Take the following example:</p>
  
  <pre><code>struct matrix
  {
      float data[16];
  };
  </code></pre>
  
  <p>I know what the default constructor and destructor do in this specific example (nothing), but what about the copy constructor and the copy assignment operator?</p>
  
  <pre><code>struct matrix
  {
      float data[16];
  
      // automatically generated copy constructor
      matrix(const matrix&amp; that) : // What happens here?
      {
          // (or here?)
      }
  
      // automatically generated copy assignment operator
      matrix&amp; operator=(const matrix&amp; that)
      {
          // What happens here?
  
          return *this;
      }
  };
  </code></pre>
  
  <p>Does it involve <code>std::copy</code> or <code>std::uninitialized_copy</code> or <code>memcpy</code> or <code>memmove</code> or what?</p>