Actualmente estoy buscando algún código que pueda compilarse en versiones más nuevas de GCC pero no en versiones anteriores. En mi caso, estoy usando std::back_inserter
a std::copy
algunos datos de una estructura de datos a una estructura de datos personalizada. Sin embargo, si olvido el typedef typedef value_type & const_reference
en esta estructura de datos personalizada, esto no se compilará en GCC 4.4. El mismo código se compila y funciona perfectamente en GCC 4.5.std :: back_inserter necesita const_reference en GCC anterior. ¿Por qué?
Cuál es la diferencia entre estas dos versiones del compilador, que hace que el código se compile en una versión pero no en la otra. Supongo que tiene algo que ver con la implementación de C++ 11, que fue mucho menos completa en GCC 4.4. Probablemente algo con decltype
u otra nueva palabra clave C++ 11, supongo.
También este código es correcto, si uso el std::back_inserter
sin definir el tipo const_reference
? Por lo general, pensé que uno tiene que implementar el conjunto completo de typedefs (value_type
, reference
, const_reference
, etc.) para ser compatible con la biblioteca de algoritmos STL. ¿O puedo asumir con seguridad que si mi código se compila en este caso, no estoy invocando nada peligroso (por ejemplo, mover la semántica, lo que destruiría mi otra estructura de datos).
Para el registro (para ayudar a los principiantes como yo a ahorrar tiempo): Después de agregar 'typedef T & reference; typedef const T & const_reference; ' a mi estructura de datos, el error c2039 para back_inserter ha desaparecido. –