Hi all,

I know the following has been considered in the past, but I'm wondering if the considerations have changed in the last few years.  To summarize, structured bindings allow all names to be introduced with the same qualification:

std::map<unsigned int, std::string> employees = workers();
for (auto const [id, last_name] : employees); // 1. id and last_name are both copies
for (auto const& [id, last_name] : employees); // 2. id and last_name are both references

The lesser of two evils would be to pick option 2 to avoid the string copy, even though using id as a reference is suboptimal.

I would love to be able to do something like:

for (auto const [id, &last_name] : employees); // 3. id is a copy; last_name is a reference

This syntax parallels that of lambda expressions, and would therefore not be "that new" of a construct to get used to.  However, I know that this has been considered before in:


in section 3.5, and the preference is to disallow it for various reasons.  Other proposals have been made that would enable more flexible use of structured bindings.  See Ville's proposal:


It seems that the direction the committee is taking is to leave things be (keep it simple, for now) until pattern matching evolves a bit more.  Does anyone know if that's still the case, or should an attempt be made again to make structured bindings more flexible a la what is/has been proposed above?  Ville, do you have any comments?

Kyle Knoepfel