cdisp8.c

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 374 行

C
374
字号
// takes a long to compile under WPP386 with all text included
#include "fail.h"
#include <limits.h>

#pragma inline_depth(0)
#if INT_MAX == SHRT_MAX
#define USE	D20
#else
#define USE	D50
#endif

struct U1 {
    int u1;
};
struct U2 {
    int u2;
};
struct U3 {
    int u3;
};
struct U4 {
    int u4;
};

struct V : virtual U1, virtual U2 {
    int v;
    void virtual foo( int x, int line )
    {
	if( v != x ) {
	    fail(line);
	}
    }
};

struct BAD : virtual V {
    void virtual foo( int x, int line )
    {
	V::foo( x, line );
    }
    BAD()
    {
	V *pv = this;

	v = -33;
	pv->foo( v, __LINE__ );		// MSC7 fails here
    }
};
struct FAILURE : virtual BAD {
    FAILURE()
    {
	V *pv = this;

	v = -42;
	pv->foo( v, __LINE__ );		// MetaWare C++ fails here
    }
};
struct D0 : virtual FAILURE, virtual BAD, virtual U2, virtual U1 {
    int d0;
};
struct D1 : virtual D0 {
    int d1;
};
struct D2 : virtual D1 {
    int d2;
};
struct D3 : virtual D2 {
    int d3;
};
struct D4 : virtual D3 {
    int d4;
};
struct D5 : virtual D4 {
    int d5;
};
struct D6 : virtual D5 {
    int d6;
};
struct D7 : virtual D6 {
    int d7;
};
struct D8 : virtual D7 {
    int d8;
};
struct D9 : virtual D8 {
    int d9;
};
struct D10 : virtual D9 {
    int d10;
};
struct D11 : virtual D10 {
    int d11;
};
struct D12 : virtual D11 {
    int d12;
};
struct D13 : virtual D12 {
    int d13;
};
struct D14 : virtual D13 {
    int d14;
};
struct D15 : virtual D14 {
    int d15;
};
struct D16 : virtual D15 {
    int d16;
};
struct D17 : virtual D16 {
    int d17;
};
struct D18 : virtual D17 {
    int d18;
};
struct D19 : virtual D18 {
    int d19;
};
struct D20 : virtual D19 {
    int d20;
};
struct D21 : virtual D20 {
    int d21;
};
struct D22 : virtual D21 {
    int d22;
};
struct D23 : virtual D22 {
    int d23;
};
struct D24 : virtual D23 {
    int d24;
};
struct D25 : virtual D24 {
    int d25;
};
struct D26 : virtual D25 {
    int d26;
};
struct D27 : virtual D26 {
    int d27;
};
struct D28 : virtual D27 {
    int d28;
};
struct D29 : virtual D28 {
    int d29;
};
struct D30 : virtual D29 {
    int d30;
};
struct D31 : virtual D30 {
    int d31;
};
struct D32 : virtual D31 {
    int d32;
};
struct D33 : virtual D32 {
    int d33;
};
struct D34 : virtual D33 {
    int d34;
};
struct D35 : virtual D34 {
    int d35;
};
struct D36 : virtual D35 {
    int d36;
};
struct D37 : virtual D36 {
    int d37;
};
struct D38 : virtual D37 {
    int d38;
};
struct D39 : virtual D38 {
    int d39;
};
struct D40 : virtual D39 {
    int d40;
};
struct D41 : virtual D40 {
    int d41;
};
struct D42 : virtual D41 {
    int d42;
};
struct D43 : virtual D42 {
    int d43;
};
struct D44 : virtual D43 {
    int d44;
};
struct D45 : virtual D44 {
    int d45;
};
struct D46 : virtual D45 {
    int d46;
};
struct D47 : virtual D46 {
    int d47;
};
struct D48 : virtual D47 {
    int d48;
};
struct D49 : virtual D48 {
    int d49;
};
struct D50 : virtual D49 {
    int d50;
};
#if 0
struct D51 : virtual D50 {
    int d51;
};
struct D52 : virtual D51 {
    int d52;
};
struct D53 : virtual D52 {
    int d53;
};
struct D54 : virtual D53 {
    int d54;
};
struct D55 : virtual D54 {
    int d55;
};
struct D56 : virtual D55 {
    int d56;
};
struct D57 : virtual D56 {
    int d57;
};
struct D58 : virtual D57 {
    int d58;
};
struct D59 : virtual D58 {
    int d59;
};
struct D60 : virtual D59 {
    int d60;
};
struct D61 : virtual D60 {
    int d61;
};
struct D62 : virtual D61 {
    int d62;
};
struct D63 : virtual D62 {
    int d63;
};
struct D64 : virtual D63 {
    int d64;
};
struct D65 : virtual D64 {
    int d65;
};
struct D66 : virtual D65 {
    int d66;
};
struct D67 : virtual D66 {
    int d67;
};
struct D68 : virtual D67 {
    int d68;
};
struct D69 : virtual D68 {
    int d69;
};
struct D70 : virtual D69 {
    int d70;
};
struct D71 : virtual D70 {
    int d71;
};
struct D72 : virtual D71 {
    int d72;
};
struct D73 : virtual D72 {
    int d73;
};
struct D74 : virtual D73 {
    int d74;
};
struct D75 : virtual D74 {
    int d75;
};
struct D76 : virtual D75 {
    int d76;
};
struct D77 : virtual D76 {
    int d77;
};
struct D78 : virtual D77 {
    int d78;
};
struct D79 : virtual D78 {
    int d79;
};
struct D80 : virtual D79 {
    int d80;
};
struct D81 : virtual D80 {
    int d81;
};
struct D82 : virtual D81 {
    int d82;
};
struct D83 : virtual D82 {
    int d83;
};
struct D84 : virtual D83 {
    int d84;
};
struct D85 : virtual D84 {
    int d85;
};
struct D86 : virtual D85 {
    int d86;
};
struct D87 : virtual D86 {
    int d87;
};
struct D88 : virtual D87 {
    int d88;
};
struct D89 : virtual D88 {
    int d89;
};
struct D90 : virtual D89 {
    int d90;
};
struct D91 : virtual D90 {
    int d91;
};
struct D92 : virtual D91 {
    int d92;
};
struct D93 : virtual D92 {
    int d93;
};
struct D94 : virtual D93 {
    int d94;
};
struct D95 : virtual D94 {
    int d95;
};
struct D96 : virtual D95 {
    int d96;
};
struct D97 : virtual D96 {
    int d97;
};
struct D98 : virtual D97 {
    int d98;
};
struct D99 : virtual D98 {
    int d99;
};
#endif
struct DISRUPT : virtual U2, virtual U1, virtual U3, virtual U4, virtual FAILURE {
};
struct FINAL : DISRUPT, virtual USE {
    void virtual foo( int x, int line )
    {
	V::foo( x, line );
    }
};

int main()
{
    static FINAL dummy;

    _PASS;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?