¿Se garantiza que std :: array <T, S> sea POD si T es POD?

Actualmente estoy escribiendo una biblioteca de edición de memoria C ++ y para las API de lectura / escritura uso rasgos de tipo (std :: is_pod, std :: is_same) y boost :: enable_if para proporcionar 3 sobrecargas:

Tipos de POD p.ej. MyMem.Read (SomeAddress);Tipos de cadena. p.ej. MyMem.Read> (SomeAddress); (En realidad, esto no lee una cadena de C ++, lee una cadena de estilo C y la convierte en una cadena de C ++).Tipos de vectores p.ej. MyMem.Read> (SomeAddress, NumElem); (En realidad, esto no lee un vector, sino que lee una matriz de estilo C y lo convierte en un vector).

Las sobrecargas 2 y 3 son simplemente 'envoltorios' alrededor de la sobrecarga 1. (Entonces, si está leyendo un std :: vector o std :: basic_string y T no es POD, fallará, como debería ser).

Recientemente, quería usar std :: array para un montón de lecturas y escrituras porque sabía el tamaño de los datos que quería leer y escribir en tiempo de compilación (estaba escribiendo un contenedor alrededor del formato de archivo PE).

Escribí el código para usar std :: array, y luego intenté agregar otra sobrecarga para la detección y manejo de los tipos std :: array, pero accidentalmente presioné compilar y para mi sorpresa, ¡funcionó!

Actualmente estoy usando MSVC 10 y resulta que para std :: array si T es POD, entonces std :: array es POD. (Lo que significa que puedo usar la sobrecarga 1 y funciona).

Mi pregunta es si esto está garantizado por el estándar C ++ o si se deja a la implementación.

Sé que podría verificar el estándar yo mismo, pero no confío tanto en mí como confío en algunos de los abogados de idiomas en este sitio, por lo que pensé que sería mejor obtener una 'segunda opinión'. ;)

Gracias

PD Código disponible aquí (es una biblioteca de solo encabezado):http://code.google.com/p/hadesmem/source/browse/trunk/HadesMem-v2/Hades-Memory/Hades-Memory/MemoryMgr.h#86

Respuestas a la pregunta(3)

Su respuesta a la pregunta