2013-05-02 1 views
2

Для следующего класса INTEL 2013 (обновление 3) и GCC 4.7.2 дают разные результаты type_traits. Какой из них прав?C++ 11 type_traits: другой результат в INTEL 2013 и GCC 4.7.2

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

выход INTEL:

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 

ответ

2

Я бы сказал, GCC является правильным. is_pod имеет значение, если он равен is_trivial и is_standard_layout: http://en.cppreference.com/w/cpp/types/is_pod. Компилятор Intel не соответствует этому. is_literal_type также должно быть правдой, так как все условия считаются действительными для A: http://en.cppreference.com/w/cpp/types/is_literal_type

+0

Hmmm, является конструктором по умолчанию конструктором 'constexpr'? Неявно предоставленный, но я не уверен, что явно дефолт один, если явно не объявлен 'constexpr'. –

+0

@BenVoigt Почему это должно отличаться? Оба они вычисляются во время компиляции. – SomeWittyUsername

+0

Поскольку, когда вы явно не выполняете его, у вас есть возможность явно использовать ключевое слово 'constexpr', и поэтому, если вы этого не сделаете, компилятор, возможно, должен предположить, что вы этого не хотели. –

 Смежные вопросы

  • Нет связанных вопросов^_^