use boost.pp