GCC STL(4.6.1)を調べたところ、ビルトインがに評価されstd::copy()
た場合に最適化されたバージョンを使用していることがわかりました。__is_trivial()
true
std::copy()
とテンプレートは配列内の要素をコピーするのに非常に便利なので、std::reverse_copy()
それらを使用したいと思います。ただし、いくつかの些細な値を含み、ポインターを含まず、コピーコンストラクターまたは代入演算子を持たない構造体であるいくつかのタイプ(テンプレートのインスタンス化の結果)があります。
G ++は、私のタイプが実際には些細なものであることを理解するのに十分賢いですか?C ++ 98で、STL実装が私の型が取るに足らないことを認識していることを確認する方法はありますか?
is_trivial<>
C ++ 11では、タイプ特性を使用すると便利になると思います。これは正しいですか?
ありがとう!
編集:これに遅れて申し訳ありませんが、これは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;
}