Forwarding constructors calls 2 times copy constructor of base class

Viewed 347

The following code forwards constructors from base to derived class.

Why 2 copy constructor calls? What happen in the background?

Compiled with g++.

#include <iostream>
using namespace std;

struct A {
    A() { cout << "A" << endl; }
    A(const A&) { cout << "A(const A&)" << endl; }
    template<typename T> A(T a); // Needed to compile :-O
};

template<typename T>
struct C : public T { using T::T; };

int main()
{
    A a;
    C<A> ca(a);
    //C<A> caa(ca);
    return 0;
}

Output is:

A
A(const A&)
A(const A&)
2 Answers
Related