Pregunta

El estándar final de C ++ 11 incluye disposiciones para el rango basado en "solo trabajar" para matrices nativas sin tener que incluir <iterator> o cualquier otro encabezado. Esto se abordó primero, por lo que puedo decir, en papel de trabajo N2900 Como resultado de los comentarios del Reino Unido 78 y 79.

Esta propuesta también incluyó una disposición a implícitamente #include <initializer_list> en cada unidad de traducción, para que el programa

#include <iostream>

int main()
{
    for (auto i : { 1, 2, 3, 4, 5 })
        std::cout << i << "\n";
}

sería una conformación estándar incluso sin incluir <initializer_list>.

Sin embargo, cuando los conceptos se eliminaron de C ++ 11, el rango basado en rango se revisó como se ve en N2930. Si bien la provisión para que las matrices "solo funcionen" permanezcan, no se menciona que lo mismo es cierto para las listas de inicializador; De hecho, la especificación de que varios encabezados de contenedores de biblioteca estándar #include <initializer_list> y el texto final de 8.5.4.2 implica lo contrario para mí.

Por lo que puedo decir, esto está bastante cerca de la redacción final sobre el tema. Entonces, el programa anterior está bien formado con respecto al estándar final, o necesito #include <initializer_list> incluso para usarlo en un rango basado en rango? Dicho de otra manera, el uso de una lista de inicializador en un rango basado en un rango constituye un "uso de std::initializer_list--- ¿Incluso un uso implícito en el que el tipo no se nombra "por 8.5.4.2 de los FDI?

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top