The total value of a standardized enumeration numbering

clang ++ complains about variable uninitialization:

template<typename TEnum> void func() {
    TEnum enumVar; 
    // ...
    if(something()) enumVar = someValue();
    // ...
    if(something()) doSomethingWith(enumVar); // <- clang++ tells me 
                                              // enumVar may be uninitialized
}

Usually, to avoid this warning, an enumeration may have a value Unknown = -1or something similar, but, unfortunately, the enumeration type is passed by the user as here typename TEnum, so I don’t know if it contains "null value".

Is there any way to solve the problem? Or should I just ignore / suppress the warning?

+4
source share
4 answers

You can initialize the enumeration:

template<typename TEnum> void func() {
    TEnum enumVar = TEnum();
    // TEnum enumVar {}; // C++11 way

    // ...
    if(something()) enumVar = someValue();
    // ...
    if(something()) doSomethingWith(enumVar);
}

, 0, .

+2

, . , :

template<typename TEnum> 
void func() 
{
    TEnum enumVar = something() ?  someValue() : otherValue();
    if (something()) 
        doSomethingWith(enumVar); 
}

, something() , .., : .

+3

boost::optional<E> , . UB , , similsr-.

0

:

template<typename TEnum, TEnum nullValue> void func() {
    TEnum enumVar = nullValue;
    // ...
}

++ 11 :

template<typename TEnum, TEnum nullValue = Enum()> void func() {
    TEnum enumVar = nullValue;
    // ...
}
0

All Articles