File tree Expand file tree Collapse file tree 1 file changed +5
-12
lines changed Expand file tree Collapse file tree 1 file changed +5
-12
lines changed Original file line number Diff line number Diff line change @@ -1571,18 +1571,11 @@ Decl *TemplateDeclInstantiator::VisitEnumDecl(EnumDecl *D) {
1571
1571
Enum->setIntegerType (SemaRef.Context .IntTy );
1572
1572
else
1573
1573
Enum->setIntegerTypeSourceInfo (NewTI);
1574
-
1575
- // The following lines are relevant for opaque-enum-declarations.
1576
- // If users declare a full enum-specifier, the promotion type is reset
1577
- // again when parsing the (potentially empty) enumerator-list.
1578
- // We implement the same logic from C++11 [conv.prom] p4 here but only
1579
- // after template specialization [temp.spec.general] because it requires
1580
- // the concrete type.
1581
- // Note that (1) this also correctly handles the non-dependent case,
1582
- // (2) we set the promotion type for scoped enumerations to ensure
1583
- // consistency with declarations outside of templates, (3) we guarantee a
1584
- // valid promotion even if the user provided an invalid underlying type
1585
- // (fallback to "default int").
1574
+ // C++23 [conv.prom]p4
1575
+ // if integral promotion can be applied to its underlying type, a prvalue of an unscoped enumeration type
1576
+ // whose underlying type is fixed can also be converted to a prvalue of the promoted underlying type.
1577
+ //
1578
+ // FIXME: that logic is already implemented in ActOnEnumBody, factor out into (Re)BuildEnumBody.
1586
1579
QualType UnderlyingType = Enum->getIntegerType ();
1587
1580
Enum->setPromotionType (
1588
1581
SemaRef.Context .isPromotableIntegerType (UnderlyingType)
You can’t perform that action at this time.
0 commit comments