title: What is the meaning of ellipses in a copy constructor?
body: <p>Consider the following program:</p>
  
  <pre><code>#include &lt;iostream&gt;
  struct Test
  {
      int a;
      Test() : a(3)
      { }
      Test(const Test&amp; t...)
      {
          std::cout&lt;&lt;"Copy constructor called\n";
          a=t.a;
      }
      int get_a()
      {
          return a;
      }
      ~Test()
      {
          std::cout&lt;&lt;"Destructor is called\n";
      }
  };
  int main()
  {
      Test t;
      Test* t1=new Test(t);
      std::cout&lt;&lt;t.get_a()&lt;&lt;'\n';
      std::cout&lt;&lt;t1-&gt;get_a()&lt;&lt;'\n';
      delete t1;
  }
  </code></pre>
  
  <p>Closely observe the three dots in parameter of copy constructor
  I was really surprised when I tried this program. What is the use of it? What does it mean?</p>
  
  <p>What the language specification says about this? </p>
  
  <p>I know that three dots are used to represent variable length arguments in variadic functions 
  like <code>printf()</code> and <code>scanf()</code> etc and also variadic macros introduced by C99. In C++, if I am not wrong, they are used in variadic templates.<br>
  Is this code well formed? Is this variadic copy constructor that can take any number of arguments?</p>
  
  <p>It compiles &amp; runs fine on g++ 4.8.1 &amp; MSVS 2010. </p>