bug#53605: CC Mode 5.35.1 (C++//l); C++11 string literal operator mishighlighted

Richard Copley <[email protected]>
Newsgroups gmane.emacs.cc-mode.general
Message-ID <CAPM58oi2F-kLO3OHfPvNekKU9gfK2N4SUVJLZyDR+F57C=noGA@mail.gmail.com>
Package: cc-mode
Hi Alan,

The code below (which is valid since C++11) is mishighlighted,
with the open-paren after "_opcode" in font-lock-warning face
and the subsequent characters in font-lock-string-face. This is
unstable: inserting and deleting a character before the open-
paren fixes the highlighting, and [M-x normal-mode RET] breaks
it again.

<<END
#include <cstddef>
int operator""_opcode(const char *p, std::size_t size) {
  return 0;
}
END

Emacs  : GNU Emacs 29.0.50 (build 3, x86_64-w64-mingw32)
 of 2022-01-28 (on master)
Package: CC Mode 5.35.1 (C++//l)
Buffer Style: gnu
c-emacs-features: (pps-extended-state col-0-paren posix-char-classes
gen-string-delim gen-comment-delim syntax-properties 1-bit)

current state:
==============
(setq
 c-basic-offset 2
 c-comment-only-line-offset '(0 . 0)
 c-indent-comment-alist '((anchored-comment column . 0) (end-block
space . 1) (cpp-end-block space . 2))
 c-indent-comments-syntactically-p nil
 c-block-comment-prefix ""
 c-comment-prefix-regexp '((pike-mode . "//+!?\\|\\**") (awk-mode .
"#+") (other . "//+\\|\\**"))
 c-doc-comment-style '((java-mode . javadoc) (pike-mode . autodoc)
(c-mode . gtkdoc) (c++-mode . gtkdoc))
 c-cleanup-list '(scope-operator)
 c-hanging-braces-alist '((substatement-open before after)
(arglist-cont-nonempty))
 c-hanging-colons-alist nil
 c-hanging-semi&comma-criteria '(c-semi&comma-inside-parenlist)
 c-backslash-column 48
 c-backslash-max-column 72
 c-special-indent-hook '(t c-gnu-impose-minimum)
 c-label-minimum-indentation 1
 c-offsets-alist '((inexpr-class . +)
           (inexpr-statement . +)
           (lambda-intro-cont . +)
           (inlambda . 0)
           (template-args-cont c-lineup-template-args +)
           (incomposition . +)
           (inmodule . +)
           (innamespace . +)
           (inextern-lang . +)
           (composition-close . 0)
           (module-close . 0)
           (namespace-close . 0)
           (extern-lang-close . 0)
           (composition-open . 0)
           (module-open . 0)
           (namespace-open . 0)
           (extern-lang-open . 0)
           (objc-method-call-cont c-lineup-ObjC-method-call-colons
c-lineup-ObjC-method-call +)
           (objc-method-args-cont . c-lineup-ObjC-method-args)
           (objc-method-intro . [0])
           (friend . 0)
           (cpp-define-intro c-lineup-cpp-define +)
           (cpp-macro-cont . +)
           (cpp-macro . [0])
           (inclass . +)
           (stream-op . c-lineup-streamop)
           (arglist-cont-nonempty c-lineup-gcc-asm-reg c-lineup-arglist)
           (arglist-cont c-lineup-gcc-asm-reg 0)
           (comment-intro c-lineup-knr-region-comment c-lineup-comment)
           (catch-clause . 0)
           (else-clause . 0)
           (do-while-closure . 0)
           (access-label . -)
           (case-label . 0)
           (substatement . +)
           (statement-case-intro . +)
           (statement . 0)
           (brace-entry-open . 0)
           (brace-list-entry . 0)
           (brace-list-close . 0)
           (block-close . 0)
           (block-open . 0)
           (inher-cont . c-lineup-multi-inher)
           (inher-intro . +)
           (member-init-cont . c-lineup-multi-inher)
           (member-init-intro . +)
           (annotation-var-cont . +)
           (annotation-top-cont . 0)
           (topmost-intro . 0)
           (knr-argdecl . 0)
           (func-decl-cont . +)
           (inline-close . 0)
           (class-close . 0)
           (class-open . 0)
           (defun-block-intro . +)
           (defun-close . 0)
           (defun-open . 0)
           (c . c-lineup-C-comments)
           (string . c-lineup-dont-change)
           (topmost-intro-cont first c-lineup-topmost-intro-cont
c-lineup-gnu-DEFUN-intro-cont)
           (brace-list-intro first c-lineup-2nd-brace-entry-in-arglist
c-lineup-class-decl-init-+ +)
           (brace-list-open . +)
           (inline-open . 0)
           (arglist-close . c-lineup-arglist)
           (arglist-intro . c-lineup-arglist-intro-after-paren)
           (statement-cont . +)
           (statement-case-open . +)
           (label . 0)
           (substatement-label . 0)
           (substatement-open . +)
           (knr-argdecl-intro . 5)
           (statement-block-intro . +)
           )
 c-buffer-is-cc-mode 'c++-mode
 c-tab-always-indent t
 c-syntactic-indentation t
 c-syntactic-indentation-in-macros t
 c-ignore-auto-fill '(string cpp code)
 c-auto-align-backslashes t
 c-backspace-function 'backward-delete-char-untabify
 c-delete-function 'delete-char
 c-electric-pound-behavior nil
 c-default-style '((java-mode . "java") (awk-mode . "awk") (other . "gnu"))
 c-enable-xemacs-performance-kludge-p nil
 c-old-style-variable-behavior nil
 defun-prompt-regexp nil
 tab-width 8
 comment-column 32
 parse-sexp-ignore-comments t
 parse-sexp-lookup-properties t
 auto-fill-function nil
 comment-multi-line t
 comment-start-skip "\\(?://+\\|/\\*+\\)\\s *"
 fill-prefix nil
 fill-column 70
 paragraph-start "[     ]*\\(//+\\|\\**\\)[     ]*$\\|^\f"
 adaptive-fill-mode t
 adaptive-fill-regexp "[     ]*\\(//+\\|\\**\\)[     ]*\\([
]*\\([-–!|#%;>*·•‣⁃◦]+[     ]*\\)*\\)"
 )
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.