I tried implementing std::move, which uses std::remove_reference, however it seems to work without it. Please give me an exemple in which my implementation fails, where std::remove_reference is necessary.
template <class type> type && move(type & source) { return (type &&) source; }
template <class type> type && move(type && source) { return (type &&) source; }
Is std::remove_reference used only to avoid overloading std::move ?
Here is a test class to help you :
class test {
public :
test() { }
test(const test & source) { std::cout << "copy.\n"; }
test(test && source) { std::cout << "move.\n"; }
};
Not a duplicate of How does std::move() transfer values into RValues? because my question includes an exemple that seems to show that std::remove_reference is useless in this case + the sub-question.