fix a bug to use std::fill_n