implement generic property value as a union instead of void*