don't require any external lib (except boost£