Errichtet mit this online compiler, den folgenden Code:Warum kann nicht std :: tuple <int> trivial kopierbar sein?
#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;
}
Ausgänge:
0
0
0
0
ich die gleichen Ergebnisse mit Visual Studio 2015 bekommen
Warum ist das der Fall? Gibt es einen triftigen Grund eine std::tuple
von POD-Typen, geschweige denn eine einfache std::pair
, könnte nicht trivial kopierbar sein? Ich nehme an, dass ihre Implementierungen einige benutzerdefinierte Zuweisungsoperatoren bereitstellen, aber wie würden sie sich von den Standardversionen unterscheiden, die vom Compiler generiert werden?
http://stackoverflow.com/questions/36625317/error-cannot-pass-objects-of-non-trivial-copyable-type-throught bedeutet, dass der Standard es nicht erfordert, so dass Implementierungen nicht stören – happydave