Question

J'ai regardé le GCC STL (4.6.1) et j'ai vu cela std::copy() utilise une version optimisée au cas où le intégré __is_trivial() évalue à true.

Depuis le std::copy() et std::reverse_copy() Les modèles sont très utiles pour copier des éléments dans les tableaux, je voudrais les utiliser. Cependant, j'ai certains types (qui sont les résultats des instanciations de modèle) qui sont des structures qui contiennent des valeurs triviales, pas de pointeurs et n'ont pas de constructeur de copie ni d'opérateur d'affectation.

G ++ est-il suffisamment intelligent pour comprendre que mon type est en fait trivial? Existe-t-il un moyen dans C ++ 98 pour s'assurer qu'une implémentation STL sait que mon type est trivial?

Je suppose que dans C ++ 11, les choses deviendront pratiques en utilisant le is_trivial<> Type Trait. Est-ce correct?

Merci!

Edit: Désolé d'être si tard avec ça, mais voici un exemple d'un assez simple Type classe qui n'est pas triviale pour GCC et LLVM. Des idées?

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

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top