Yes it is by omission in [conv.ptr]
and the applicable paragraph is in [expr.reinterpret.cast]
,
7
An object pointer can be explicitly converted to an object pointer of
a different type. When a prvalue v of type "pointer to T1" is
converted to the type "pointer to cv T2", the result is
static_cast<cv T2*>(static_cast<cv void*>(v))
if both T1 and T2 are
standard-layout types (3.9) and the alignment requirements of T2 are
no stricter than those of T1, or if either type is void. Converting a
prvalue of type "pointer to T1" to the type "pointer to T2" (where T1
and T2 are object types and where the alignment requirements of T2 are
no stricter than those of T1) and back to its original type yields the
original pointer value. The result of any other such pointer
conversion is unspecified.
You have to use reinterpret_cast<int*>(...)
.
EDIT. There is a concern in the comments that I am making more visible in this edit, that this is not a language-lawyer question but that the intention is to use the pointer. I am not sure how the concern came about, as it is rather obvious that one can simply C-cast without asking, but if there is doubt - the pointer cast to int*
violates strict aliasing rules.
That is, an undefined behaviour may arise from the fact that you break the compiler's assumption that pointers of different types could never point to the same memory location.