% cat template_base_class.cpp
#include <list>
template<typename T> class Vector : public std::vector<T>
{
public:
int At(int i)
{
return at(i);
}
};
gcc だと、 error: there are no arguments to `at' that depend on a template parameter, so a declaration of `at' must be available の様なエラーがでて、-fpermissive を渡すと、無視させて進めることが出来る。
llvm だと
template_base_class.cpp:8:14: error: use of undeclared identifier 'at' return at(i);等となる。
なお、Solaris と AIX のコンパイラは大丈夫なようだ。
C++ もテンプレートなどが発展して、名前解決の規則が厳しくなり、しっかりと分かりやすくテンプレート基底クラスから、at が使われると明示してやる必要がある。
修正の仕方は三つ。
セコメントをする