Some types are not amenable to copy semantics but can still be made movable.
For example:

unique_ptr (non-shared,
non-copyable ownership)

A type representing a thread of execution

A type representing a file descriptor

By making such types movable (though still non-copyable) their utility is tremendously
increased. Movable but non-copyable types can be returned by value from factory
functions:

file_descriptorcreate_file(/*...*/);//...file_descriptordata_file;//...data_file=create_file(/*...*/);// No copies!

In the above example, the underlying file handle is passed from object to object,
as long as the source file_descriptor
is an rvalue. At all times, there is still only one underlying file handle,
and only one file_descriptor
owns it at a time.

To write a movable but not copyable type in portable syntax, you need to follow
these simple steps: