考虑以下 C++ 代码片段,在 Emacs 中使用 cc-mode 缩进:
auto good1 = f(a,
{1, 2}); // ((arglist-cont-nonempty 1 15))
auto bad1 = f<1>(a,
{1, 2}); // ((inexpr-statement) (block-open 36))
auto good2 = f(a,
b, // ((arglist-cont-nonempty 68 82))
{1, 2}); // ((arglist-cont-nonempty 68 82))
auto bad2 = f<1>(a,
b // ((arglist-cont-nonempty 114 130))
{1, 2}); // ((inexpr-statement) (block-open 114))
auto good3 = f(a,
b, // ((arglist-cont-nonempty 151 165))
{1, 2}, // ((arglist-cont-nonempty 151 165))
c);
auto bad3 = f<3>(a,
b, // ((arglist-cont-nonempty 209 225))
{1, 2}, // ((inexpr-statement) (block-open 209))
c);
如您所见,花括号参数{1, 2}
在模板化函数调用中出现时没有正确缩进。这是因为它们被错误地标记为((inexpr-statement) (block-open X))
而不是((arglist-cont-nonempty Y Z))
(确切的偏移量可能不同,我在使用后编辑了注释C-c C-s
以获取句法标签)。
有谁知道如何解决这个问题?我尝试了专门从 Sourceforge 下载的最新版本的 CC-Mode (5.32.5) 以及 Debian 和 Ubuntu 附带的默认版本,但他们都弄错了。