W8118 Package クラスのインライン メンバ関数(C++)
クラスに PACKAGE と指定するのは(たとえば __declsepc(package) など)、パッケージ内で実装されているとコンパイラに知らせるためです。 つまり、パッケージでクラスをエクスポートし、利用する側ではクラスをインポートするということです。 そのため、インラインと指定されたメンバ関数が PACKAGE クラス内で見つかると、コンパイラは警告を出力します。 これは、インラインという指定が、その関数を本当はエクスポートやインポートするべきではなく、呼び出し側の本体内で直接拡張するべきであるとコンパイラに示唆するものだからです。
#include <System.hpp>
#include <Classes.hpp>
#include <iostream>
class PACKAGE TFoo : public TComponent
{
public:
void inline bar() { std::cout<<"I warn people"<<std::endl;} // W8118
};
メモ:コンパイラは可能な限り、PACKAGE と指定されたクラスのメソッドを 'inline' にするという要求を受け入れます。 ただし、inline の要求と PACKAGE 指定子とは矛盾するため、警告も生成されます。 PACKAGE クラスのインライン メソッドそれぞれについて、インラインにしても本当に安全かどうかを確認する必要があります。 安全であれば、警告を無視するか、局所的に無効にすることができます。