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

海合会输出:

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 是正确的。is_pod如果两者兼有,则为真is_trivialis_standard_layouthttp: //en.cppreference.com/w/cpp/types/is_pod。英特尔编译器不符合这一要求。is_literal_type也应该是正确的,因为所有条件似乎都适用于Ahttp ://en.cppreference.com/w/cpp/types/is_literal_type

于 2013-05-02T18:18:51.387 回答