Recibo una advertencia ([-Wmaybe-uninitialized]) en un código que no creo que deba lanzar una advertencia. Compilando con cmake usando GCC. Básicamente está diciendo que una variable puede no inicializarse, pero creo que está garantizado que se inicializará. Aquí hay un ejemplo:
#include<iostream> enum class ByteOrder { little_endian, big_endian }; class someClass { someClass(ByteOrder order = ByteOrder::little_endian) : kOrder{order} {} void someFunc(); private: const ByteOrder kOrder; }; void someClass::someFunc() { int i; switch(kOrder) { case ByteOrder::little_endian: i = 0; break; case ByteOrder::big_endian: i = 1; break; } std::cout << i; }Según GCC, yo en la línea
std::cout << i; podría no estar inicializado. Pero no veo cómo es posible, ya que solo hay dos opciones en la declaración de cambio. Intenté configurar ByteOrder en nullptr pero eso no funcionó. ¿Me estoy perdiendo de algo?
Para ilustrar los comentarios a su pregunta, intente esto:
const ByteOrder kOrder = (ByteOrder)3; En pocas palabras: solo agregue el caso default: es posible que desee throw desde allí.
Todos tuvieron una gran contribución en esto. Terminé resolviendo esto simplemente inicializando mi variable a un valor arbitrario. No queríamos usar el valor predeterminado porque queríamos mantener las advertencias que aparecen cuando no tiene una declaración de cambio exhaustiva para una enumeración. Gracias a todos por responder.