c++ c++11 standards language-lawyer iso

¿Podemos aplicar contenido no citado explícitamente de las referencias normativas al estándar C++?



c++11 standards (1)

La función de la sección Referencias normativas de un documento de la norma ISO se define en las Directivas ISO / IEC, Parte 2, 2011 §6.2.2:

6.2.2 Referencias normativas

Este elemento condicional deberá proporcionar una lista de los documentos de referencia citados (ver 6.6.7.5) en el documento de manera tal que sean indispensables para la aplicación del documento. Para referencias con fecha, cada uno se entregará con su año de publicación o, en el caso de una investigación o borrador final, con un guión junto con una nota a pie de página "A publicar", y el título completo. El año de publicación o guión no se dará para referencias sin fecha. Cuando una referencia sin fecha es a todas las partes de un documento, el número de publicación irá seguido por la indicación "(todas las partes)" y el título general de la serie de partes (es decir, los elementos introductorios y principales, consulte el Anexo E).

En principio, los documentos de referencia serán documentos publicados por ISO y / o IEC. Los documentos publicados por otros organismos pueden consultarse de manera normativa siempre que

a) el ISO o el comité de IEC en cuestión reconocen que el documento al que se hace referencia tiene una amplia aceptación y un estatus de autoridad, además de estar disponible públicamente,

b) el comité de ISO y / o IEC correspondiente haya obtenido el acuerdo de los autores o editores (cuando se conozcan) del documento al que se hace referencia para su inclusión y su disponibilidad como sea necesario; se espera que los autores o editores pongan a disposición tales documentos. documentos a pedido,

c) los autores o editores (cuando se conozcan) también acordaron informar a la ISO y / o al comité de IEC interesados ​​acerca de su intención de revisar el documento de referencia y de los puntos a los que se referirá la revisión, y

d) el comité de ISO y / o IEC correspondiente se compromete a revisar la situación a la luz de cualquier cambio en el documento de referencia.

La lista se introducirá con la siguiente redacción:

“Los siguientes documentos, en su totalidad o en parte, están referenciados normativamente en este documento y son indispensables para su aplicación. Para las referencias con fecha, sólo se aplica la edición citada. Para referencias sin fecha, se aplica la última edición del documento de referencia (incluidas las enmiendas) ".

La redacción anterior también es aplicable a una parte de un documento de varias partes.

La lista no incluirá lo siguiente:

  • documentos referenciados que no están públicamente disponibles;

  • documentos referenciados que solo son citados de manera informativa;

  • Documentos referenciados que simplemente han servido como material bibliográfico o de fondo en la preparación del documento.

Dichos documentos de referencia pueden incluirse en una bibliografía (ver 6.4.2).

En particular, no dice que el contenido de los documentos de referencia se incorpore en el documento actual. Esencialmente, sirve como una lista de todos los demás documentos estándar a los que se hace referencia de manera normativa en otras partes del documento.

Así que no todo en, por ejemplo, C99 está incorporado en C ++ 11, solo aquellas partes de C99 a las que se hace referencia específicamente como incorporadas en el estándar C ++ 11.

En la norma C ++ 11 (el borrador más cercano es N3337 ), la sección 1.2 Referencias normativas, dice:

Los siguientes documentos de referencia son indispensables para la aplicación de este documento. Para las referencias con fecha, sólo se aplica la edición citada. Para referencias sin fecha, se aplica la última edición del documento de referencia (incluidas las enmiendas).

pero no hay pautas sobre cómo aplicar las referencias. Los casos fáciles son cuando C ++ 11 se refiere explícitamente a una referencia, por ejemplo, en la sección 3.9.1 Tipos fundamentales que dice:

[...] Los tipos de enteros con signo y sin signo deben satisfacer las restricciones dadas en el estándar C, sección 5.2.4.2.1.

Pero ¿qué pasa con otros casos donde no hay una referencia explícita? Por ejemplo, C ++ 11 usa la palabra valor indeterminado pero no define el término. Las referencias normativas incluyen:

- ISO / IEC 9899: 1999, lenguajes de programación - C

[...]

- ISO / IEC 9899: 1999 / Cor.3: 2007 (E), Lenguajes de programación - C, Corrigendum técnico 3

y C99 ( borrador de la norma c99 ) tiene una definición de valor indeterminado en la sección 3.17.2 que dice:

ya sea un valor no especificado o una representación de trampa

¿Es correcto decir que el valor indeterminado se define C ++ 11 por referencia a C99, como parece hacer esta respuesta para la definición de bit ? En caso afirmativo, ¿qué pasa con la representación de trampa que se trata en la sección 6.2.6.1 párrafo 5 bajo Representaciones de tipos en C99?

La lectura generosa sería que mientras nada en el C ++ 11 entre en conflicto con una referencia normativa, entonces ¿se aplica esta es la interpretación correcta? Algunas de las respuestas a ¿Qué es el comportamiento indeterminado en C ++? ¿En qué se diferencia del comportamiento indefinido? Parece implicar una lectura generosa, aunque el lenguaje es un poco flojo en algunas de las respuestas, por lo que es difícil decir qué es exactamente lo que se afirma en algunos puntos.