cat > test.cc <<EOF struct M { M(M&); M(const M&) = default; }; static_assert( __is_trivially_constructible(M, M&&) ); EOF g++ -std=c++17 test.cc GCC fails the static-assert: test.cc:5:16: error: static assertion failed static_assert( __is_trivially_constructible(M, M&&) ); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Comparison to other compilers: https://godbolt.org/z/mbeKD5 Verification that the codegen for a move-construction correctly picks the trivial constructor, not the non-trivial one: https://godbolt.org/z/IBkgPY
I'll take a look.
Patch available: https://gcc.gnu.org/ml/gcc-patches/2018-09/msg00670.html