Подтвердить что ты не робот

Есть ли функция compc-time func/macro, чтобы определить, является ли С++ 0x-структурой POD?

Я хотел бы иметь С++ 0x static_assert, который проверяет, является ли данный тип структуры POD (чтобы другие программисты случайно не нарушили его с новыми членами). то есть,

struct A // is a POD type
{
   int x,y,z;
}

struct B // is not a POD type (has a nondefault ctor)
{
   int x,y,z; 
   B( int _x, int _y, int _z ) : x(_x), y(_y), z(_z) {}
}

void CompileTimeAsserts()
{
  static_assert( is_pod_type( A ) , "This assert should not fire." );
  static_assert( is_pod_type( B ) , "This assert will fire and scold whoever added a ctor to the POD type." );
}

Есть ли какой-то макрос или int is_pod_type(), который я могу использовать здесь? Я не мог найти его в каких-либо документах С++ 0x, но, конечно, информация о сети на 0x все еще довольно фрагментарная.

4b9b3361

Ответ 1

С++ 0x вводит библиотеку признаков типов в заголовке <type_traits> для такого рода интроспекции, и существует черта типа is_pod. Я считаю, что вы использовали бы его в сочетании с static_assert следующим образом:

static_assert(std::is_pod<A>::value, "A must be a POD type.");

Я использую для этого проект ИСО N3092, поэтому есть шанс, что это устарело. Я рассмотрю это в последнем черновике, чтобы подтвердить это.

EDIT. Согласно самому последнему проекту (N3242), это все еще актуально. Похоже, это способ сделать это!