not use std::is_default_construvtible as is not available on gcc 4.6