ПОД в Visual Studio 2008

Следующий код

#include <iostream>
#include <new>
#include <cstring>
#include <type_traits>

template<typename T>
void is_pod(char* c)
{
cout << "Type " << c;
if(std::is_pod<T>::value)
::std::cout << " is POD" << endl;
else
::std::cout << " is not!" << endl;
}

#define CHECK_TYPE(ty) ::is_pod<ty>(#ty)

struct POD_Parent{};
struct POD_Child : public POD_Parent{int y;};
struct POD_Child2 {int x; POD_Parent y; POD_Child ssd;};

int main()
{
CHECK_TYPE(POD_Parent);
CHECK_TYPE(POD_Child);
CHECK_TYPE(POD_Child2);

Дает следующие результаты: что странно!

Type POD_Parent is POD
Type POD_Child is not!
Type POD_Child2 is POD

Как может POD_Child не POD ?! а POD_Child2 это POD? !!

Обратите внимание, что я скомпилировал его, используя MinGW (используя опцию -std = c ++ 11), и он сказал, что все они POD.

7

Решение

В соответствии с [MSDN][1] тип с базовым классом не POD так POD_Child не является POD но для POD_Child2 возможно, это какая-то ошибка компилятора, игнорирующего базовый класс ssd

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]