rtti05.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 83 行
C
83 行
#include "fail.h"
#ifndef __WATCOM_RTTI__
ALWAYS_PASS
#else
#include <ctype.h>
#include <typeinfo.h>
namespace x {
enum E1 {
A1,B1,C1
} v1;
enum E2 {
A2,B2,C2
} v2;
struct X {
int x;
} v3;
struct Y {
int y;
} v4;
};
using namespace x;
void check( type_info const &q1, type_info const &q2 ) {
if( q1 == q2 ) _fail;
if( q1.before( q2 ) && q2.before( q1 ) ) _fail;
if( !q1.before( q2 ) && !q2.before( q1 ) ) _fail;
const char *name = q1.name();
if( name == NULL || strlen( name ) < strlen( "x::?" ) ) _fail;
if( name[0] != 'x' || name[1] != ':' || name[2] != ':' ) _fail;
if( ! isalpha( name[3] ) ) _fail;
name = q2.name();
if( name == NULL || strlen( name ) < strlen( "x::?" ) ) _fail;
if( name[0] != 'x' || name[1] != ':' || name[2] != ':' ) _fail;
if( ! isalpha( name[3] ) ) _fail;
}
int main() {
if( typeid( v1 ) != typeid( v1 ) ) _fail;
if( typeid( v2 ) != typeid( v2 ) ) _fail;
if( typeid( v3 ) != typeid( v3 ) ) _fail;
if( typeid( v4 ) != typeid( v4 ) ) _fail;
if( typeid( v1 ) == typeid( v2 ) ) _fail;
if( typeid( v1 ) == typeid( v3 ) ) _fail;
if( typeid( v1 ) == typeid( v4 ) ) _fail;
if( typeid( v2 ) == typeid( v1 ) ) _fail;
if( typeid( v2 ) == typeid( v3 ) ) _fail;
if( typeid( v2 ) == typeid( v4 ) ) _fail;
if( typeid( v3 ) == typeid( v1 ) ) _fail;
if( typeid( v3 ) == typeid( v2 ) ) _fail;
if( typeid( v3 ) == typeid( v4 ) ) _fail;
if( typeid( v4 ) == typeid( v1 ) ) _fail;
if( typeid( v4 ) == typeid( v2 ) ) _fail;
if( typeid( v4 ) == typeid( v3 ) ) _fail;
check( typeid( v1 ), typeid( v2 ) );
check( typeid( v1 ), typeid( v3 ) );
check( typeid( v1 ), typeid( v4 ) );
check( typeid( v2 ), typeid( v1 ) );
check( typeid( v2 ), typeid( v3 ) );
check( typeid( v2 ), typeid( v4 ) );
check( typeid( v3 ), typeid( v2 ) );
check( typeid( v3 ), typeid( v1 ) );
check( typeid( v3 ), typeid( v4 ) );
check( typeid( v4 ), typeid( v2 ) );
check( typeid( v4 ), typeid( v3 ) );
check( typeid( v4 ), typeid( v1 ) );
check( typeid( v1 ), typeid( E2 ) );
check( typeid( v1 ), typeid( X ) );
check( typeid( v1 ), typeid( Y ) );
check( typeid( v2 ), typeid( E1 ) );
check( typeid( v2 ), typeid( X ) );
check( typeid( v2 ), typeid( Y ) );
check( typeid( v3 ), typeid( E2 ) );
check( typeid( v3 ), typeid( E1 ) );
check( typeid( v3 ), typeid( Y ) );
check( typeid( v4 ), typeid( E2 ) );
check( typeid( v4 ), typeid( X ) );
check( typeid( v4 ), typeid( E1 ) );
_PASS;
}
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?