Я заглянул в GCC STL (4.6.1) и увидел, что std::copy()
использует оптимизированную версию в случае, если встроенная __is_trivial()
оценивается как true
.
, так как std::copy()
и *Шаблоны 1007 * очень полезны для копирования элементов в массивах, я бы хотел их использовать.Тем не менее, у меня есть некоторые типы (которые являются результатом создания шаблонов), которые являются структурами, которые содержат некоторые тривиальные значения, без указателей и не имеют конструктора копирования или оператора присваивания.
Достаточно ли умен G ++, чтобы выяснить, что мой типна самом деле это тривиально?Есть ли способ в C ++ 98, чтобы убедиться, что реализация STL знает, что мой тип тривиален?
Я предполагаю, что в C ++ 11 все станет удобно, используя черту типа is_trivial<>
.Это правильно?
Спасибо!
РЕДАКТИРОВАТЬ: Извините за опоздание с этим, но вот пример довольно простого класса Type
, который не является тривиальным для GCC и llvm.Есть идеи?
#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;
}