Переключающие операторы с сильно типизированными перечислениями

При использовании сильно типизированных перечислений в операторе switch есть ли способ избежать явного приведения к int?

/// @desc an enumeration of the states that the session can be in.
enum class State
{
    Created,    
    Connected,  
    Active,
    Closed
};

State sesState = session->GetState();

switch (static_cast<int>(sesState))
{
    case static_cast<int>(Session::State::Created):
    // do stuff.
    break;

    case static_cast<int>(Session::State::Connected):
    // do stuff.
    break;
}

Из проекта n3242:

6.4.2 Оператор switch [stmt.switch]

2 Условие должно быть интегрального типа, типа перечисления или типа класса, для которого существует единственная неявная функция преобразования в интегральный тип или тип перечисления (12.3).

Включает ли перечислительный тип сильно типизированные перечисления, или они несовместимы с операторами switch, поскольку требуют явного преобразования в int?

26
задан ildjarn 30 January 2012 в 19:09
поделиться