Files
2018-08-02 17:53:23 +01:00

50 lines
879 B
C++

int add(int x, int y)
{
return x + y;
}
int sub(int x, int y)
{
return x + y;
}
typedef int(*operator_t)(int, int);
operator_t good_get_operator(bool which)
{
return which ? add : sub;
}
int (*bad_get_operator(bool which))(int, int)
{
return which ? add : sub;
}
typedef operator_t (*good_meta_t)(bool);
typedef int (*(*bad_meta_t)(bool))(int, int);
int good_call(operator_t op, int lhs, int rhs)
{
return op(lhs, rhs);
}
int bad_call(int(*op)(int, int), int lhs, int rhs)
{
return op(lhs, rhs);
}
typedef int (*good_call_t)(operator_t, int, int);
typedef int (*bad_call_t)(int(*)(int, int), int, int);
void usages()
{
operator_t good_op = add;
int (*bad_op)(int, int) = good_op;
good_meta_t good_meta_1 = good_get_operator;
bad_meta_t good_meta_2 = good_meta_1;
good_call_t good_call_1 = good_call;
bad_call_t good_call_2 = good_call_1;
}