Tomemos una construcción de código que he encontrado recientemente en alguna parte en el proyecto:Enum valor de colisión con el nombre de enumeración
namespace Test
{
enum EName
{
CoolEnum,
NiceEnum
};
enum CoolEnum
{
CoolVal1,
CoolVal2
};
enum NiceEnum
{
NiceVal1,
NiceVal2
};
}
Mi pregunta es por qué el compilador permite que algo como esto. Tomemos un ejemplo de código aquí:
Test::CoolEnum cEnum = Test::NiceVal1; // INVALID, as compiler refers to Test::CoolEnum value of Test::Ename enum
¿Por qué se permite tal confusión? Entiendo por qué tengo que anteponer la palabra clave enum, por lo que el compilador sabe claramente que estoy declarando una variable de enumeración dada, sin usar el valor de otra enumeración en el mismo espacio de nombres. Simplemente no entiendo por qué, en primer lugar, incluso es posible hacer tal construcción.
Creo que es un compilador definido porque ese código en Ideone causa errores: http://ideone.com/4GDTF – tinman
Es por eso que he colocado gcc, pero hasta donde yo sé vc también permite tal construcción –
@Kamil es posible que desee para cambiar los nombres de las constantes enum de NiceEnum, ya que lo copió y pegó desde CoolEnum y entran en conflicto. –