Если выброшенное исключение всегда является копией объекта исключения, почему не вызывается этот конструктор копии?

Скотт Мейерс говорит:

C ++ определяет, что объект, выданный как исключение, всегда копируется, и копирование выполняется конструктором копирования объекта.

Но в моем коде:

struct test
{
    test() { cout << "constructor is called" << endl; }
    test(const test&) { cout << "copy constructor is called" << endl; }
    ~test() { cout << "destructor is called" << endl; }
};

void fun()
{
    throw test();
}

int main()
{
    try { 
       fun();
    }
    catch (test& t1) { cout << "exception handler" << endl; }
}

Я не вижу вызываемого конструктора копирования объекта исключения.

Если я изменю catch для получения объекта исключения по значению, то это будет, но, согласно цитате Мейерса, объект исключения должен быть скопирован, даже если он получен по ссылке.

Почему не вызывается конструктор копирования (даже если обработка исключений выполняется по ссылке)?

9
задан Lightness Races with Monica 6 January 2012 в 16:28
поделиться