La plantilla std::is_trivially_copy_construtible es un tipo que se puede construir de forma trivial a partir de un valor o referencia del mismo tipo. Esto incluye tipos escalares, clases construibles de copia trivial y arrays de dichos tipos. Este algoritmo está a punto de probar si un tipo es construible copiado trivialmente o no. Devuelve el valor booleano que muestra lo mismo.
Archivo de cabecera:
#include <type_traits>
Clase de plantilla:
template <class T> struct is_trivially_copy_constructible;
Si T es_trivialmente_copiar_construible, entonces hereda de tipo_verdadero ; de lo contrario, hereda de tipo_falso .
Sintaxis:
std::is_trivially_copy_constructible<int>::value std::is_trivially_copy_constructible<class T>::value
Parámetro: esta plantilla acepta un solo parámetro T (clase de rasgo) para verificar si T es construible de copia trivial o no.
Valor devuelto: esta plantilla devuelve una variable booleana como se muestra a continuación:
- Verdadero: si el tipo es trivialmente copiable construible.
- Falso: si el tipo no es trivialmente copiable construible.
Los siguientes programas ilustran la plantilla std::is_trivially_copy_construcible en C/C++:
Programa 1:
// C++ program to illustrate // is_trivially_copy_constructible #include <iostream> #include <type_traits> using namespace std; // Struct Class struct A { }; struct B { B(const B&) {} }; struct C { virtual void fn() {} }; // Driver Code int main() { cout << boolalpha; cout << "is_trivially_copy_constructible: " << endl; cout << "int: " << is_trivially_copy_constructible<int>::value << endl; cout << "A: " << is_trivially_copy_constructible<A>::value << endl; cout << "B: " << is_trivially_copy_constructible<B>::value << endl; cout << "C: " << is_trivially_copy_constructible<C>::value << endl; return 0; }
is_trivially_copy_constructible: int: true A: true B: false C: false
Programa 2:
// C++ program to illustrate // is_trivially_copy_constructible #include <iostream> #include <type_traits> using namespace std; // Structure struct Ex1 { string str; }; struct Ex2 { int n; Ex2(const Ex2&) = default; }; // Driver Code int main() { cout << boolalpha; cout << "Ex1 is copy-constructible? "; cout << is_copy_constructible<Ex1>::value << endl; cout << "Ex1 is trivially copy-constructible? "; cout << is_trivially_copy_constructible<Ex1>::value << endl; cout << "Ex2 is trivially copy-constructible? "; cout << is_trivially_copy_constructible<Ex2>::value << endl; cout << "Ex2 is nothrow copy-constructible? "; cout << is_nothrow_copy_constructible<Ex2>::value << endl; }
Ex1 is copy-constructible? true Ex1 is trivially copy-constructible? false Ex2 is trivially copy-constructible? true Ex2 is nothrow copy-constructible? true