struct X;
struct Y {};
struct Z : Y {};
void fn (void *p, void const *cp, Y *yp, Y const *ycp, Z *zp, Z const *zcp)
{
static_cast <X *> (p);
static_cast <X const *> (p);
static_cast <int *> (p);
static_cast <int const *> (p);
static_cast <int **> (p);
static_cast <int const **> (p);
static_cast <int *const *> (p);
static_cast <int const *const *> (p);
static_cast <X *> (cp); static_cast <X const *> (cp);
static_cast <int *> (cp); static_cast <int const *> (cp);
static_cast <int **> (cp); static_cast <int const **> (cp); static_cast <int *const *> (cp);
static_cast <int const *const *> (cp);
static_cast <Z *> (yp);
static_cast <Z const *> (yp);
static_cast <Z *> (ycp); static_cast <Z const *> (ycp);
static_cast <Y *> (zp);
static_cast <Y const *> (zp);
static_cast <Y *> (zcp); static_cast <Y const *> (zcp);
}