本の項目 43 では、以下のコードはコンパイルできないと書かれています。私の理解では、メソッドがインスタンス化されるとコンパイルエラーが発生しますLoggingMsgSender::sendClearMsg
。
ただし、3 つのコンパイラ (VC 2005、gcc 4.4.1、および組み込みデバイス用の 1 つ) については試しました。それらのどれもコンパイルエラーを示していません。
本に記載されているエラーを表示できるコンパイラはありますか? どんな提案でも大歓迎です。ご協力ありがとうございました。
(この種のテンプレート基本クラス関数呼び出しに関連するソースで、VC 2005 の潜在的なコンパイラ バグを発見しました。そのため、コンパイル エラーが必要です。それは長い話です...)
class CompanyX
{
public:
void sendClearText(){};
};
typedef int MsgInfo;
template<typename Company>
class MsgSender {
public:
void sendClear(const MsgInfo&)
{
Company c;
c.sendClearText();
}
};
template<typename Company>
class LoggingMsgSender : public MsgSender<Company> {
public:
void sendClearMsg(const MsgInfo& info)
{
sendClear( info ); // ERROR : will not compile despite clearly being in base class.
}
};
int main()
{
LoggingMsgSender<CompanyX> sender;
sender.sendClearMsg(1); // specialization of the method!!!
}