有没有办法强迫g ++编译这个程序?

时间:2013-03-13 12:22:06

标签: gcc compiler-errors g++

让g ++编译它不应该是一个好主意(我怀疑一般不可能),但在这种情况下,我试图编写静态分析检查来查找违规具体的MISRA规则,不幸的是g ++相当好:)我试图检查一个规则,说明"指向虚拟基类的指针只能通过以下方式转换为指向派生类的指针的dynamic_cast&#34。这是一个明智的规则,g ++自己检查它并且无法编译以下代码:

class B
{
public:
        virtual ~B() {}
};

class D : public B {};
class VD : virtual public B {};

int main()
{
        D d;
        VD vd;
        B *pd = &d;
        B *pvd = &vd;
        D *d1 = (D*)(pd); // Fine
        D *d2 = static_cast<D*>(pd); // Fine
        D *d3 = dynamic_cast<D*>(pd); // Fine
        D& d4 = static_cast<D&>(*pd); // Fine
        D& d5 = dynamic_cast<D&>(*pd); // Fine
        VD *vd1 = (VD*)(pvd); // Bad
        VD *vd2 = static_cast<VD*>(pvd); // Bad
        VD *vd3 = dynamic_cast<VD*>(pvd); // Fine
        VD& vd4 = static_cast<VD&>(*pvd); // Bad
        VD& vd5 = dynamic_cast<VD&>(*pvd); // Fine
        return 0;
}

这使我对使用g ++作为编译器感到非常积极,但在这种情况下有点问题,因为(a)我们必须能够构建代码以便使用我们的工具进行分析,并且(b)可能还有其他编译器无法编译这些代码,在这种情况下,我们不能将其标记为&#34;编译器检查&#34;总的来说。

如果没有尝试找到另一个编译它的编译器(这是一个选项),有没有办法让g ++编译它?我试了-fpermissive没有成功。

0 个答案:

没有答案