最近、C++テンプレートのタイプミスを探すのに時間を費やしました。g ++はタイプミスについて文句を言わなかったので、将来この種の問題をチェックできるツールがあるかどうか疑問に思いました。
これは、正しいコンパイルを示す簡単な例です。構造体ダミーが定義されていないという苦情が予想されますが、テンプレート化されたクラスgooがそれを隠しているようです。
foo.h:
struct smart {
int x, y, z;
};
template<typename T> class goo
{
void barf(T* ptr){}
};
template<typename T> class foo
{
public:
foo(){};
private:
goo<T> x;
};
class bar: public foo<struct dummy>
{
public:
void do_something(struct smart& thing){}
};
foo.cpp:
#include "foo.h"
int main()
{
bar a;
struct smart b;
a.do_something(b);
return b.x+b.y+b.z;
}
g++foo.cppで正常にコンパイルされます