use std::unique_ptr
replace boost::assign facilities with initializer lists