#include <iostream>
#include <string>
#include <utility>
/*Вопросы
1. Почему нельзя передать rvalue дальше?
2. Если обернуть в std::move, то заработает, правильно ли оборачивать в std::move?
3. Сейчас передачу rvalue's делаю как 'const Type& varname', это же правильный способ?
*/
struct AA {
std::string path;
AA(const std::string&& path) {
this->path = path;
}
};
struct BB : public AA{
//но если обертнуть в std::move, то все заработает
BB(const std::string&& path) : AA(path){//std::move(path)
}
};
int main() {
AA aa("Hello, simple rvalue!");//OK
BB bb("Hello, complex rvalue!");
std::cout << bb.path << std::endl;
std::cout << static_cast<AA>(bb).path << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dXRpbGl0eT4KCi8q0JLQvtC/0YDQvtGB0YsKMS4g0J/QvtGH0LXQvNGDINC90LXQu9GM0LfRjyDQv9C10YDQtdC00LDRgtGMIHJ2YWx1ZSDQtNCw0LvRjNGI0LU/CjIuINCV0YHQu9C4INC+0LHQtdGA0L3Rg9GC0Ywg0LIgc3RkOjptb3ZlLCDRgtC+INC30LDRgNCw0LHQvtGC0LDQtdGCLCDQv9GA0LDQstC40LvRjNC90L4g0LvQuCDQvtCx0L7RgNCw0YfQuNCy0LDRgtGMINCyIHN0ZDo6bW92ZT8KMy4g0KHQtdC50YfQsNGBINC/0LXRgNC10LTQsNGH0YMgcnZhbHVlJ3Mg0LTQtdC70LDRjiDQutCw0LogJ2NvbnN0IFR5cGUmIHZhcm5hbWUnLCDRjdGC0L4g0LbQtSDQv9GA0LDQstC40LvRjNC90YvQuSDRgdC/0L7RgdC+0LE/CiovCnN0cnVjdCBBQSB7CglzdGQ6OnN0cmluZyBwYXRoOwoJQUEoY29uc3Qgc3RkOjpzdHJpbmcmJiBwYXRoKSB7CgkJdGhpcy0+cGF0aCA9IHBhdGg7Cgl9Cn07CnN0cnVjdCBCQiA6IHB1YmxpYyBBQXsKCS8v0L3QviDQtdGB0LvQuCDQvtCx0LXRgNGC0L3Rg9GC0Ywg0LIgc3RkOjptb3ZlLCDRgtC+INCy0YHQtSDQt9Cw0YDQsNCx0L7RgtCw0LXRggoJQkIoY29uc3Qgc3RkOjpzdHJpbmcmJiBwYXRoKSA6IEFBKHBhdGgpey8vc3RkOjptb3ZlKHBhdGgpCgl9Cn07CgppbnQgbWFpbigpIHsKCUFBIGFhKCJIZWxsbywgc2ltcGxlIHJ2YWx1ZSEiKTsvL09LCiAgICBCQiBiYigiSGVsbG8sIGNvbXBsZXggcnZhbHVlISIpOwogICAgc3RkOjpjb3V0IDw8IGJiLnBhdGggPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8IHN0YXRpY19jYXN0PEFBPihiYikucGF0aCA8PCBzdGQ6OmVuZGw7CgogICAgcmV0dXJuIDA7Cn0=