// PR c++/111660
// { dg-do compile { target c++11 } }

enum Value {
  LPAREN,
  RPAREN,
  LBRACE,
  RBRACE,
  LBRACK,
  RBRACK,
  CONDITIONAL,
  COLON,
  SEMICOLON,
  COMMA,
  PERIOD,
  BIT_OR,
  BIT_AND,
  BIT_XOR,
  BIT_NOT,
  NOT,
  LT,
  GT,
  MOD,
  ASSIGN,
  ADD,
  SUB,
  MUL,
  DIV,
  PRIVATE_NAME,
  STRING,
  TEMPLATE_SPAN,
  IDENTIFIER,
  WHITESPACE,
  ILLEGAL,
};

constexpr Value GetOneCharToken(char c) {
  return
      c == '(' ? LPAREN :
      c == ')' ? RPAREN :
      c == '{' ? LBRACE :
      c == '}' ? RBRACE :
      c == '[' ? LBRACK :
      c == ']' ? RBRACK :
      c == '?' ? CONDITIONAL :
      c == ':' ? COLON :
      c == ';' ? SEMICOLON :
      c == ',' ? COMMA :
      c == '.' ? PERIOD :
      c == '|' ? BIT_OR :
      c == '&' ? BIT_AND :
      c == '^' ? BIT_XOR :
      c == '~' ? BIT_NOT :
      c == '!' ? NOT :
      c == '<' ? LT :
      c == '>' ? GT :
      c == '%' ? MOD :
      c == '=' ? ASSIGN :
      c == '+' ? ADD :
      c == '-' ? SUB :
      c == '*' ? MUL :
      c == '/' ? DIV :
      c == '#' ? PRIVATE_NAME :
      c == '"' ? STRING :
      c == '\'' ? STRING :
      c == '`' ? TEMPLATE_SPAN :
      c == '\\' ? IDENTIFIER :
      c == ' ' ? WHITESPACE :
      c == '\t' ? WHITESPACE :
      c == '\v' ? WHITESPACE :
      c == '\f' ? WHITESPACE :
      c == '\r' ? WHITESPACE :
      c == '\n' ? WHITESPACE :
      ILLEGAL;
}

int main() {}