Гарантированно ли std :: array POD, если T равно POD?

В настоящее время я пишу библиотеку редактирования памяти C ++, а для API чтения / записи я использую черты типа (std :: is_pod, std :: is_same) и boost :: enable_if для предоставления 3 перегрузки:

  1. типов POD. Например, MyMem.Read (SomeAddress);
  2. строковых типов. Например MyMem.Read> (SomeAddress); (На самом деле это не считывает строку C ++, он считывает строку в стиле C и преобразует ее в строку C ++.)
  3. Векторные типы. например MyMem.Read> (SomeAddress, NumElem); (На самом деле это не считывает вектор, а скорее считывает массив в стиле C и преобразует его в вектор.)

Перегрузки 2 и 3 являются просто «оболочками» для перегрузки 1. (Так что, если вы чтение std :: vector или std :: basic_string, а T не POD, он завершится ошибкой, как и должно.)

Недавно я хотел использовать std :: array для множества операций чтения и записи, потому что я знал размер данные, которые я хотел прочитать и записать во время компиляции (я писал оболочку для формата PE-файла).

Я написал код для использования std :: array, а затем намеревался добавить еще одну перегрузку для обнаружения и обработки std :: array, но я случайно нажал на компиляцию, и, к моему удивлению, это сработало!

I ' m в настоящее время использует MSVC 10, и оказывается, что для std :: array, если T - POD, то std :: array - POD. (Это означает, что я могу просто использовать перегрузку 1, и она работает.)

Мой вопрос в том, гарантируется ли это стандартом C ++ или оставлено на усмотрение реализации.

Я знаю, что могу проверить стандарт сам, но я не делаю этого. Я не доверяю себе настолько, насколько я доверяю некоторым языковым юристам на этом сайте, поэтому я решил, что было бы лучше получить «второе мнение». ;)

Спасибо

Код PS доступен здесь (это библиотека только для заголовков): Я доверяю себе настолько же, насколько я доверяю некоторым языковым юристам на этом сайте, поэтому я решил, что было бы лучше получить «второе мнение». ;)

Спасибо

Код PS доступен здесь (это библиотека только для заголовков): Я доверяю себе настолько же, насколько я доверяю некоторым языковым юристам на этом сайте, поэтому я решил, что было бы лучше получить «второе мнение». ;)

Спасибо

Код PS доступен здесь (это библиотека только для заголовков): http://code.google.com/p/hadesmem/source/browse/trunk/HadesMem-v2/Hades-Memory/Hades-Memory/MemoryMgr.h#86

17
задан R. Martinho Fernandes 24 August 2011 в 22:53
поделиться