代码之家  ›  专栏  ›  技术社区  ›  Daniel Lemire

如何使用C++的PrimaCLAN属性推送C++命名空间?

  •  1
  • Daniel Lemire  · 技术社区  · 5 年前

    LLVM的clang/clang++允许您 specify attributes for entire regions of code . 语法如下:

        // the following works fine under clang:
        #pragma clang attribute push(__attribute__((target("sse4.2"))), apply_to=function)
        void f(){}
        #pragma clang attribute pop
    

    f 将在支持SSE4.2指令集的情况下编译。这将适用于 attribute push attribute pop .

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

        namespace joe {
        #pragma clang attribute push(__attribute__((target("sse4.2"))), apply_to=function)
        void g() {}
        #pragma clang attribute pop
        }
    

    它失败了 'error: expected unqualified-id' . 显然是关键词 attribute 编译器不需要。

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

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

    I have created a gist to illustrate the issue .

    0 回复  |  直到 5 年前
        1
  •  0
  •   Jan Wassenberg    4 年前

    这似乎适用于第九届(2019-09年),但在这之前不行: https://gcc.godbolt.org/z/okfDiS