The following overload features are unsupported at this time.
Usually, two function declarations of the same name with parameter types that only differ in a parameter that is an enumeration in one declaration, and a different enumeration in the other, can be overloaded. This feature is unsupported at this time. Example:
enum e1 {a, b, c};
enum e2 {d, e};
int g(e1) { return 3; }
int g(e2) { return 4; }
----------------^--------------------ERROR:function redefinition
Usually, in the context of a pointer-to-function parameter of a user-defined operator, using a function name without arguments selects the non-member function that matches the target. This feature is unsupported at this time. Example:
const int F_char = 100;
int func(char)
{
return F_char;
}
struct A {} a;
int operator+(A, int (*pfc)(char))
{
return pfc(0);
}
if (a + func != F_char){}
-----------^----------------- Arithmetic types expected
struct X {
void f (void) {}
void f (int) {}
} x;
typedef void (X::*mfvp)(void);
mfvp f03() {
return &X::f;
----------------------^-------ERROR:Cannot take address of this object
}
template <class T> int f(T) { return F_char; }
int f(int) { return F_int; }
int (*p00)(char) = f;
--------------------------------^-----------ERROR: Indirection to different types ('int (*)(int)' instead of 'int (*)(char )')
struct S {
int m;
template <class T> void operator+=(T t) { m += t; } //
ERROR at template
};