I've run some example programs and noticed that move functions (constructor and assignment operator) never used until i compile with disabled copy elision (in GCC "-fno-elide-constructors"). So the questions are:
- When in practice (with modern mainstream C++11/14 or C++17 compilers) move functions are useful?
- If move functions required, when user implemented move functions needed instead of default compiler-generated ones?
P.S. AFAIK RVO is mandatory in C++17 standard, but even in not latest versions of C++11/14 compilers RVO/NRVO implemented (GCC version 5.3).