pat 1054, a better way
pat 1054 can only pass by C++