我有一个问题,我最终下降到这个简单的例子:调用基本方法模板子类
template <int dimensions> class Base {
protected:
Base(void) {}
public:
virtual ~Base(void) {}
void base_method(void) {}
};
template <int dimensions> class MyClass : public Base<dimensions> {
public:
MyClass(void) : Base<dimensions>() {
base_method();
}
~MyClass(void) {}
};
这将编译于2010年MSVC罚款,但没有相克++ 4.6:
main2.cpp: In constructor âMyClass<dimensions>::MyClass()â:
main2.cpp:12:16: error: there are no arguments to âbase_methodâ that depend on a template parameter, so a declaration of âbase_methodâ must be available [-fpermissive]
main2.cpp:12:16: note: (if you use â-fpermissiveâ, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
发生了什么事?
http://www.parashift.com/c++-faq/nondependent-name-lookup-members.html – aschepler