Sfoglia il codice sorgente

Don't define an unscoped enumeration out of line. (#5282)

The C++ language semantics for doing so are weird and a bit broken.
Under
[CWG1485](https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1485)
this code may become invalid in the future.
Richard Smith 1 anno fa
parent
commit
6322c7734e
1 ha cambiato i file con 37 aggiunte e 38 eliminazioni
  1. 37 38
      toolchain/parse/precedence.h

+ 37 - 38
toolchain/parse/precedence.h

@@ -88,7 +88,43 @@ class PrecedenceGroup {
   }
 
  private:
-  enum PrecedenceLevel : int8_t;
+  enum PrecedenceLevel : int8_t {
+    // Sentinel representing the absence of any operator.
+    Highest,
+    // Terms.
+    TermPrefix,
+    // Numeric.
+    IncrementDecrement,
+    NumericPrefix,
+    Modulo,
+    Multiplicative,
+    Additive,
+    // Bitwise.
+    BitwisePrefix,
+    BitwiseAnd,
+    BitwiseOr,
+    BitwiseXor,
+    BitShift,
+    // Type formation.
+    TypePrefix,
+    TypePostfix,
+    // `where` keyword.
+    Where,
+    // Casts.
+    As,
+    // Logical.
+    LogicalPrefix,
+    Relational,
+    LogicalAnd,
+    LogicalOr,
+    // Conditional.
+    If,
+    // Assignment.
+    Assignment,
+    // Sentinel representing a context in which any operator can appear.
+    Lowest,
+  };
+
   struct OperatorPriorityTable;
 
   static const int8_t NumPrecedenceLevels;
@@ -117,43 +153,6 @@ struct PrecedenceGroup::Trailing {
 //
 ////////////////////////////////////////////////////////////////////////////////
 
-enum PrecedenceGroup::PrecedenceLevel : int8_t {
-  // Sentinel representing the absence of any operator.
-  Highest,
-  // Terms.
-  TermPrefix,
-  // Numeric.
-  IncrementDecrement,
-  NumericPrefix,
-  Modulo,
-  Multiplicative,
-  Additive,
-  // Bitwise.
-  BitwisePrefix,
-  BitwiseAnd,
-  BitwiseOr,
-  BitwiseXor,
-  BitShift,
-  // Type formation.
-  TypePrefix,
-  TypePostfix,
-  // `where` keyword.
-  Where,
-  // Casts.
-  As,
-  // Logical.
-  LogicalPrefix,
-  Relational,
-  LogicalAnd,
-  LogicalOr,
-  // Conditional.
-  If,
-  // Assignment.
-  Assignment,
-  // Sentinel representing a context in which any operator can appear.
-  Lowest,
-};
-
 inline auto PrecedenceGroup::ForPostfixExpr() -> PrecedenceGroup {
   return PrecedenceGroup(Highest);
 }