¿Por qué std :: tuple <int> no se puede copiar trivialmente?

Construido coneste compilador en línea, el siguiente código:

#include <iostream>
#include <type_traits>
#include <tuple>

int main() {
    std::cout << std::is_trivially_copyable<std::tuple<int>>::value << std::endl;
    std::cout << std::is_trivially_copyable<std::pair<int, int>>::value << std::endl;

    std::cout << std::is_trivial<std::tuple<int>>::value << std::endl;
    std::cout << std::is_trivial<std::pair<int, int>>::value << std::endl;
    return 0;
}

salidas:

0
0
0
0

Estoy obteniendo los mismos resultados con Visual Studio 2015.

¿Por qué es ese el caso? ¿Hay una razón válida unstd::tuple de tipos de POD, y mucho menos un simplestd::pair, no podría ser trivialmente copiable? Supongo que sus implementaciones proporcionan algunos operadores de asignación personalizados, pero ¿cómo serían diferentes de las versiones predeterminadas generadas por el compilador?

Respuestas a la pregunta(2)

Su respuesta a la pregunta