Для следующего класса 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
Hmmm, является конструктором по умолчанию конструктором 'constexpr'? Неявно предоставленный, но я не уверен, что явно дефолт один, если явно не объявлен 'constexpr'. –
@BenVoigt Почему это должно отличаться? Оба они вычисляются во время компиляции. – SomeWittyUsername
Поскольку, когда вы явно не выполняете его, у вас есть возможность явно использовать ключевое слово 'constexpr', и поэтому, если вы этого не сделаете, компилятор, возможно, должен предположить, что вы этого не хотели. –