cppreference define "Construtor de movimento trivial":
O construtor de movimento para a classe T é trivial se todas as condições a seguir forem verdadeiras:
NÃO é fornecido pelo usuário (ou seja, é definido implicitamente ou padrão);
T não possui funções de membro virtual;T não possui classes básicas virtuais;
o construtor de movimento selecionado para cada base direta de T é trivial;
o construtor move selecionado para cada tipo de classe não estática (ou matriz de tipo de classe) membro de T é trivial.
cppreference também define "construtor de movimento definido implicitamente":
Se o construtor de movimento declarado implicitamente NEM for excluído NEM trivial, ele será definido (isto é, um corpo de função será gerado e compilado) pelo compilador se odr for usado ou necessário para avaliação constante.
O construtor de movimento declarado implicitamente NÃO deve ser excluído é óbvio. Mas "não deve ser trivial" soa confuso para mim.
Isso não significa que, se NÃO for trivial, deve ser "fornecido pelo usuário"? E se já é "um fornecido pelo usuário", então por que "um declarado implicitamente" entra em ação?
Então, o que há de errado aqui? Qual é o objetivo de um construtor de movimento declarado implicitamente NÃO ser trivial? Por favor ajude.