Domanda

Ho guardato nel GCC STL (4.6.1) e l'ho visto std::copy() Utilizza una versione ottimizzata nel caso in cui il builtin __is_trivial() valuta a true.

Dal std::copy() e std::reverse_copy() I modelli sono molto utili per la copia di elementi in array, vorrei usarli. Tuttavia, ho alcuni tipi (che sono risultati di istanziazioni dei modelli) che sono strutture che contengono alcuni valori banali, nessun puntamento e non hanno costruttore di copie o operatore di assegnazione.

G ++ è abbastanza intelligente da capire che il mio tipo in realtà è banale? Esiste un modo in C ++ 98 per assicurarsi che un'implementazione STL sappia che il mio tipo è banale?

Immagino che in C ++ 11, le cose diventeranno convenienti usando il is_trivial<> tipo tratto. È giusto?

Grazie!

EDIT: scusa per essere così in ritardo con questo, ma ecco un esempio di piuttosto semplice Type Classe che non è banale a GCC e LLVM. Qualche idea?

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

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top