title: error: cannot pass objects of non-trivially-copyable type through `...`
body: <p>I have a class <code>unit</code>, which has the properties</p>
  
  <pre><code>std::is_trivial&lt;unit&gt;::value; // true
  std::is_trivially_copyable&lt;unit&gt;::value; // true (on compilers which have this trait)
  </code></pre>
  
  <p>I'd like to pass are vectors of <code>unit</code> as a tuple, e.g.</p>
  
  <pre><code>using geodeticTuple = std::tuple&lt;unit, unit, unit&gt;;
  </code></pre>
  
  <p>I need these vectors to be passable into conversion functions who use different types of arguments, e.g.</p>
  
  <p><code>someOtherType convert(const geodeticTuple&amp; point, const geodeticTuple&amp;  origin)</code> or</p>
  
  <p><code>someOtherType convert(const geodeticTuple&amp; point, ...)</code></p>
  
  <p>using MSVC2015, this works totally fine, but with gcc-4.9.3, I'm getting the error:</p>
  
  <blockquote>
    <p>error: cannot pass objects of non-trivially-copyable type <code>const geodeticTuple {aka const struct std::tuple&lt;unit, unit, unit&gt;}</code> through <code>...</code></p>
  </blockquote>
  
  <p>and since gcc-4.9.3 doesn't support the <code>is_trivially_xxx</code> style type-traits, I'm having trouble understanding why this is failing.</p>
  
  <p>Is a tuple of trivial types not trivially copyable?</p>