This commit fixes issues with enumeration types instantiated from an opaque-enum-declarations (see [dcl.enum]) in class templates broke basic assumptions during parsing of arithmetic expressions due to absent (NULL TYPE) promotion types of instances of EnumDecl. To this end, we repeat the simple steps in `Sema::ActOnTag` to evaluate the promotion type of a fixed enumeration based on its underlying type (see C++11 [conv.prom] p4). Note that if, instead, a full *enum-specifier* (subsequent curly braces) is provided, `Sema::ActOnEnumBody` is re-invoked on template instantiation anyway overriding the promotion type and hiding the issue. This is analog to how enumerations declarations outside of template declarations are handled. Note that, in contrast to `Sema::ActOnEnumBody`, `Sema::ActOnTag` is *not* called again for the instantiated enumeration type. Fixes #117960. --------- Co-authored-by: cor3ntin <corentinjabot@gmail.com>
258 KiB
258 KiB