質問

GCC STL(4.6.1)を調べて、それを見ました std::copy() ビルトインの場合に備えて、最適化されたバージョンを使用します __is_trivial() に評価します true.

以来 std::copy()std::reverse_copy() テンプレートは、配列の要素をコピーするのに非常に役立ちます。それらを使用したいと思います。ただし、いくつかの些細な値、ポインターなし、コピーコンストラクターまたは割り当てオペレーターを持たない構造体であるいくつかのタイプ(テンプレートインスタンス化の結果)があります。

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

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top