`test t2 =std::move(t);` is compiled to `test t2 = test(static_cast<const test &&>(std::move(t)));` in which > std::move isn't it redundant in compiled version ? so compiled version should be `test t2 = test(static_cast<const test &&>(t));` ?