Clang 如何使用C++;名称空间?

Clang 如何使用C++;名称空间?,clang,clang++,Clang,Clang++,LLVM的clang/clang++允许您。语法如下: //在叮当声中,以下各项工作正常: #pragma-clang-attribute-push(uuuu-attribute_uuuuuu((目标(“sse4.2”)),apply_u-to=函数) void f(){} #pragma-clang属性弹出 在本例中,函数f将在支持SSE4.2指令集的情况下编译。这将适用于属性推送和属性弹出之间的所有函数 如果我们添加一个名称空间呢 名称空间{ #pragma-clang-attribute

LLVM的clang/clang++允许您。语法如下:

//在叮当声中,以下各项工作正常:
#pragma-clang-attribute-push(uuuu-attribute_uuuuuu((目标(“sse4.2”)),apply_u-to=函数)
void f(){}
#pragma-clang属性弹出
在本例中,函数
f
将在支持SSE4.2指令集的情况下编译。这将适用于
属性推送
属性弹出
之间的所有函数

如果我们添加一个名称空间呢

名称空间{
#pragma-clang-attribute-push(uuuu-attribute_uuuuuu((目标(“sse4.2”)),apply_u-to=函数)
void g(){}
#pragma-clang属性弹出
}
it失败,出现“错误:预期为不合格id”。显然,编译器不需要关键字
属性

考虑到名称空间是多么常见,这个问题有些出乎意料。当然,可以避免使用名称空间来解决这个问题,但这有点不雅观

有更好的解决办法吗

我已经用所有最新的LLVM clang++编译器(8.0之前)验证了这个问题


.

这似乎在Clang9(2019-09)中起作用,但在之前不起作用:

在我看来像是一个愚蠢的解析器bug。最简单的事情可能是修复C++解析器。作为一种解决方案,我们将属性推/流行。