throw std::move(ex)
От: sergii.p  
Дата: 06.12.18 15:03
Оценка: 28 (5)
задался вопросом, можно ли бросить исключение, при этом сделав перемещение бросаемого объекта.
Наткнулся, на довольно интересное поведение
#include <iostream>
using namespace std;

struct A
{
    A() {s = "initial"; cout << "ctor" << endl;}
    A(const A&a) {s = a.s; cout << "copy" << endl;}
    A(A&&a) { s = std::move(a.s); cout << "move" << endl;}
    A& operator=(const A&a) { s = a.s; cout << "copy=" << endl;}
    A& operator=(A&&a) {s = std::move(a.s); cout << "move=" << endl;}
    string s;
};

int main() {
    A a;
    try {
        throw a;
    }
    catch(const A& ta){
        cout << ta.s << endl;
    }
    cout << a.s;
    return 0;
}


кто думает, каков будет вывод?

  а вот какой...
'
ctor
move
initial

'


Никого, кроме меня, не напрягает такое поведение?
Код здесь https://ideone.com/DCvzTa
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.