Функция не может этого сделать, но макрос может, если вы не возражаете, добавить немного технического UB, который не может / не будет иметь большого значения:
#define mysizeof(T) (size_t)((char *)((T*)0+1)-(char *)0)
Если вызаменив 0 на адрес объекта статической длительности хранения, который больше, чем любой другой объект, размер которого вы когда-либо пытались бы принять, UB исчезнет.
Редактировать: Примечаниечто это для типов T
;версия для переменных намного проще:
#define mysizeof(v) (size_t)((char *)(&v+1)-(char *)&v)