警告 C26828

異なる列挙型には重複する値があります。 ここで別の列挙型定数を使用しましたか?

解説

ほとんどの場合、1 つの列挙型は、オプションに使用できるすべてのビット フラグを記述します。 同じビットごとの式で重複する値を持つ 2 つの異なる列挙型を使用する場合、それらの列挙型が一緒に使用するように設計されていない可能性があります。

コード分析名: MIXING_OVERLAPPING_ENUMS

次のサンプル コードでは、警告 C26828 が発生します。

enum BitWiseA
{
    A = 1,
    B = 2,
    C = 4
};

enum class BitWiseB
{
    AA = 1,
    BB = 2,
    CC = 4,
    All = 7
};

int overlappingBitwiseEnums(BitWiseA a) 
{
    return (int)a|(int)BitWiseB::AA; // Warning C26828: Different enum types have overlapping values. Did you want to use another enum constant here?
}

警告を修正するには、一緒に使用するように設計された列挙型に重複する値がないことを確認します。 または、関連するすべてのオプションが 1 つの列挙型にあることを確認します。

enum BitWiseA
{
    A = 1,
    B = 2,
    C = 4
};

int overlappingBitwiseEnums(BitWiseA a) 
{
    return (int)a|(int)BitWiseA::A; // No warning.
}

関連項目

C26813
C26827