是__attribute __((section(" .something")))是否允许在模板类的静态成员上?

时间:2017-02-28 16:23:51

标签: c++ gcc static attributes

在以下示例中,clang将相应的变量放入' .aaa'和' .ggg'正确。海湾合作委员会在' .ggg'但不是' .aaa' (类模板的静态成员变量)。

template<int I>
struct s{
    __attribute__((section(".aaa"))) static  int a[100];
};

__attribute__((section(".ggg"))) int  b[100]; 

template<int I>
__attribute__((section(".aaa"))) int s<I>::a[100];

这是一个GCC错误还是clang的自愿支持?

是否有一个好的工作(除了使s :: a成为全局而非静态成员)?

注意:我遗漏了编译器版本,因为godbolt上的所有GCC版本基本上都是相同的https://godbolt.org/g/E5s0mi

1 个答案:

答案 0 :(得分:2)

gcc的官方文档说

  

将section属性与全局变量一起使用,而不是局部变量,如示例所示。

本地联动=错误? 如果类本身是本地的,则静态成员变量是本地的。 我会通过模板声明说它的本地。

source