It is strict in C.
Say you are given one basic structure and two other derived structures. These derived structures are not produced in the classical sense (i.e.: A: B), but rather contain only structures of the base type. So, if struct A is the base, and B is one of 2 derived structures, B will have a member of type A. Like this:
struct A {
};
struct B {
A part_a;
}
struct C {
A part_a;
}
Say you have an A_downcast_B function, something like this:
B * A_downcast_B(A * a)
{
}
You want this function to return, 0or -1if you were 'a'not able to flush down to the type structure B. So, for example, if a "derived" type structure Chad a pointer to a type of type A*, and this pointer was passed to this function, the function would return 0, -1or null.
? , .