I've got the following implementation of the c++ concept move_constructible
from cppreference
template<typename _Tp>
concept move_constructible =
constructible_from<_Tp, _Tp> &&
convertible_to<_Tp, _Tp>;
I don't get why this works. I presume any type can be converted to itself, so the second requirement is pointless (God, I must be very wrong about something). Also, for the first requirement I would have expected something like constructible_from<_Tp, _Tp&&>
to check if the type can be constructed from rvalue-ref (thus, moved).
Please explain how this implementation works.