2

次のクラスでは、INTEL 2013 (アップデート 3) と GCC 4.7.2 で異なるtype_traits結果が得られます。どちらが正しいですか?

#include <iostream>
#include <type_traits>

using namespace std;

class A
{
public:
    A() = default;

private:
    double t_;
};

int main()
{
    cout << boolalpha;
    cout << "is_trivial<A>         : " << is_trivial<A>::value << endl;
    cout << "is_compound<A>        : " << is_compound<A>::value << endl;
    cout << "is_pod<A>             : " << is_pod<A>::value << endl;
    cout << "is_standard_layout<A> : " << is_standard_layout<A>::value << endl;
    cout << "is_literal_type<A>    : " << is_literal_type<A>::value << endl;

    return 0;
}

インテル出力:

is_trivial<A>         : true
is_compound<A>        : true
is_pod<A>             : false
is_standard_layout<A> : true
is_literal_type<A>    : false

GCC 出力:

is_trivial<A>         : true
is_compound<A>        : true
is_pod<A>             : true
is_standard_layout<A> : true
is_literal_type<A>    : true
4

1 に答える 1

2

GCCが正しいと思います。http://en.cppreference.com/w/cpp/types/is_podの両方でis_podある場合は trueです。Intel コンパイラはこれに準拠していません。すべての条件が有効であるように見えるため、これも真である必要があります: http://en.cppreference.com/w/cpp/types/is_literal_typeis_trivialis_standard_layoutis_literal_typeA

于 2013-05-02T18:18:51.387 に答える