Pregunta

Miré en el GCC STL (4.6.1) y vi eso std::copy() utiliza una versión optimizada en caso de que Builtin __is_trivial() evaluar true.

Desde el std::copy() y std::reverse_copy() Las plantillas son muy útiles para copiar elementos en matrices, me gustaría usarlos. Sin embargo, tengo algunos tipos (que son resultados de instancias de plantilla) que son estructuras que contienen algunos valores triviales, no hay punteros y no tienen constructor de copias ni operador de asignación.

¿G ++ es lo suficientemente inteligente como para descubrir que mi tipo de hecho es trivial? ¿Hay alguna forma en C ++ 98 para asegurarse de que una implementación STL sepa que mi tipo es trivial?

Supongo que en C ++ 11, las cosas se volverán convenientes usando el is_trivial<> Tipo de rasgo. ¿Es esto correcto?

¡Gracias!

Editar: Perdón por llegar tan tarde con esto, pero aquí hay un ejemplo de una bastante simple Type clase que no es trivial para GCC y LLVM. ¿Algunas ideas?

#include <iostream>

struct Spec;

template <typename TValue, typename TSpec>
class Type
{
public:
    TValue value;

    Type() : value(0) {}
};

int main()
{
    std::cerr << "__is_trivial(...) == "
              << __is_trivial(Type<char, Spec>) << '\n';                                                                                                                                                                                                                                    
    return 0;
} 

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top