7

関数属性と関数属性gccを使用してこれを簡単に実現できます(以下のコードを参照)。ただし、これらの関数属性の両方をサポートすることになっているにもかかわらず、これは機能しません。usednoinline 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()

参照されないこの静的関数を強制的に発行するにはどうすればよいですか?

4

1 に答える 1