Thanks very much for the explanations, folks! One more follow-up question: what are reasons to prefer:
std::string product;
product = "not worked";
i.e., separate declaration and initialization, as suggested by the grand-parent?