Почему конструктор копирования здесь не вызывается?

Для следующего кода:

    #include<iostream>
    using namespace std;

    class Test
    {
    public:
       Test(const Test &t) { cout<<"Copy constructor called"<<endl;}
       Test()        { cout<<"Constructor called"<<endl;}
    };

    Test fun()
    {
        cout << "fun() Called\n";
        Test t;
        return t;
    }

    int main()
    {
        Test t1;
        Test t2 = fun();
        return 0;
    }

Я действительно запутался относительно того, когда вызывается конструктор копирования? Например, если я запускаю вышеупомянутую программу, конструктор копирования не вызывается. Это означает, что если я испорчу параметры, переданные конструктору копирования (исключая ключевое слово const), он не должен показывать ошибки компилятора. Но его показ

"нет соответствующей функции для вызова 'Test :: Test (Test)'"

Кроме того, fun () возвращает объект типа test, который создается во время выполнения fun (). Почему конструктор копирования здесь не вызывается?

    int main()
    {
        fun();
        return 0;
    }

также, если я делаю следующие изменения в основной функции, почему конструктор копирования вызывается только один раз, а не дважды?

    int main()
    {
        Test t2 = fun();
        Test t3 = t2;
        return 0;
    }

Ответы на вопрос(2)

Ваш ответ на вопрос