VS2010中奇怪地重复出现模板模式错误

Curiously Recurring Template Pattern Bug in VS2010?

本文关键字:模式 错误 VS2010      更新时间:2023-10-16

为什么不在VS2010中编译此代码?

struct Base
{
    void foo0() { }
};
template<typename BASE> struct Derived : BASE
{
    void foo1() { foo0(); }
};
int main()
{
    Derived<Base> ddd;
    ddd.foo1();
    return 0;   
}

它在其他编译器中编译得很好。如果我在下面的帮助下调用foo0,它也会编译:this->foo0();

我刚刚发现这种行为背后的原因是语言扩展编译器选项(/Za)。所以,若语言扩展被禁用,上述代码将无法编译。奇怪的是,这一定是C++语言的一部分,而不是MS语言扩展。

希望这能帮助到别人。。。

在声明Derived<BASE>::foo1()时,它不知道BASE是什么。然后它试图弄清楚foo0是什么。视图中没有foo0——或者更糟的是,它找到了一个全局foo0来调用。这是一个错误。

当您改为调用this->foo0()时,您会通知编译器您希望将其作为一个方法来查找。