⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cp-class.h

📁 早期freebsd实现
💻 H
字号:
/* The following structure is used when comparing various alternatives   for overloading.  The unsigned quantity `strikes.i' is used   for fast comparison of two possibilities.  This number is an   aggregate of four constituents:     EVIL: if this is non-zero, then the candidate should not be considered     USER: if this is non-zero, then a user-defined type conversion is needed     B_OR_D: if this is non-zero, then use a base pointer instead of the             type of the pointer we started with.     EASY: if this is non-zero, then we have a builtin conversion           (such as int to long, int to float, etc) to do.   If two candidates require user-defined type conversions, and the   type conversions are not identical, then an ambiguity error   is reported.   If two candidates agree on user-defined type conversions,   and one uses pointers of strictly higher type (derived where   another uses base), then that alternative is silently chosen.   If two candidates have a non-monotonic derived/base pointer   relationship, and/or a non-monotonic easy conversion relationship,   then a warning is emitted to show which paths are possible, and   which one is being chosen.   For example:   int i;   double x;   overload f;   int f (int, int);   double f (double, double);   f (i, x);	// draws a warning   struct B   {     f (int);   } *bb;   struct D : B   {     f (double);   } *dd;   dd->f (x);	// exact match   dd->f (i);	// draws warning   Note that this technique really only works for 255 arguments.  Perhaps   this is not enough.  */struct candidate{  tree function;		/* A FUNCTION_DECL */  unsigned char evil;		/* !0 if this will never convert.  */  unsigned char user;		/* !0 if at least one user-defined type conv.  */  unsigned short b_or_d;	/* count number of derived->base or				   base->derived conv.  */  unsigned short easy;		/* count number of builtin type conv.  */  tree arg;			/* first parm to function.  */  unsigned short *harshness;	/* Indexed by argument number, encodes				   evil, user, d_to_b, and easy strikes for				   that argument.				   At end of array, we store the index+1				   of where we started using default				   parameters, or 0 if there are none.  */  union    {      tree field;		/* If no evil strikes, the FUNCTION_DECL of				   the function (if a member function).  */      int bad_arg;		/* the index of the first bad argument:				   0 if no bad arguments				   > 0 is first bad argument				   -1 if extra actual arguments				   -2 if too few actual arguments.				   -3 if const/non const method mismatch.				   -4 if type unification failed.				   -5 if contravariance violation.  */    } u;};int rank_for_overload ();/* Variables shared between cp-class.c and cp-call.c.  */extern int n_vtables;extern int n_vtable_entries;extern int n_vtable_searches;extern int n_vtable_elems;extern int n_convert_harshness;extern int n_compute_conversion_costs;extern int n_build_method_call;extern int n_inner_fields_searched;

⌨️ 快捷键说明

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