関数属性と関数属性gcc
を使用してこれを簡単に実現できます(以下のコードを参照)。ただし、これらの関数属性の両方をサポートすることになっているにもかかわらず、これは機能しません。used
noinline
clang
簡単な例:
template<typename T>
struct Factory {
static __attribute__((used, noinline))
T createFoo() { return T(); }
};
int main() {
Factory<int> f; // instantiate and use Factory<int>
}
コードをコンパイルしgcc
て使用nm
し、gcc が関数を正しく発行したことを確認します。
nm --demangle test | grep createFoo
0000000000403185 W Factory<int>::createFoo()
コードは で正常にコンパイルされますが、想定されているように静的関数clang
のコードを出力しません。createFoo()
参照されないこの静的関数を強制的に発行するにはどうすればよいですか?