backward compatible,before gcc 4.6.3