only you can prevent reinterpret_cast