Почему std :: tuple <int> не может быть легко копируемым?

Построен сэтот онлайн компилятор, следующий код:

#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;
}

выходы:

0
0
0
0

Я получаю те же результаты с Visual Studio 2015.

Почему это так? Есть ли веская причинаstd::tuple типов POD, не говоря уже о простомstd::pair, не может быть тривиально копируемым? Я предполагаю, что их реализации предоставляют некоторые пользовательские операторы присваивания, но как они будут отличаться от версий по умолчанию, генерируемых компилятором?

Ответы на вопрос(2)

Ваш ответ на вопрос