2396. underlying_type doesn't say what to do for an incomplete enumeration type

Section: 21.3.8.7 [meta.trans.other] Status: C++17 Submitter: Richard Smith Opened: 2014-06-12 Last modified: 2017-07-30

Priority: 0

View all other issues in [meta.trans.other].

View all issues with C++17 status.

Discussion:

Consider:

enum E {
  e = std::underlying_type<E>::type(1)
};

Clearly this should be ill-formed, but the library section doesn't appear to ban it. Suggestion:

Change in 21.3.8.7 [meta.trans.other] Table 57:

Template: template<class T> struct underlying_type;

Condition: T shall be a complete an enumeration type (7.2)

Comments: […]

[2014-06-16 Rapperswil]

Move to Ready

Proposed resolution:

This wording is relative to N3936.

  1. Change Table 57 — "Other transformations" as indicated:

    Table 3 — Other type transformations
    Template Condition Comments
    template <class T>
    struct underlying_type;
    T shall be a complete an enumeration type (7.2) […]