2017-02-28 6 views
0

は正しく「.aaa」と「.ggg」で、それぞれの変数を置きます。 GCCは '.ggg'では動作しますが、'aaa '(クラステンプレートの静的メンバ変数)では動作しません。は、テンプレートクラスの静的メンバに__attribute __((セクション(「何かを」)))許可されていますか?次の例で打ち鳴らす中

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作る以外::グローバルではなく、静的メンバ)の周りに良い仕事がありますか?

注:私は基本的にgodbolt上のGCCのすべてのバージョンと同じものをコンパイラのバージョンをん取り残さhttps://godbolt.org/g/E5s0mi

答えて

2

GCCの公式ドキュメントは

は、グローバル変数やないでセクション属性を使用して言いますこの例に示すように、ローカル変数。

ローカルリンケージ=間違っていますか? 静的メンバー変数は、クラス自体がローカルの場合はローカルです。 と私はテンプレート宣言を介してそのローカルと言うでしょう。

source

関連する問題