Yup - that sizeof is going to get sizeof(void*), regardless of the actual size of the array passed.
Also, even if it were right, it'd be the number of bytes in the array, not the number of entries.  For that the common
```
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
```
would be the thing you need; but, as noted above, that won't work here because this function only sees disalowed_datatypes as a pointer, not as an array whose size it knows.