Question: So this is what I have:

```
struct Foo {
    std::string name;
    //etc

    std::map<std::string, std::function<void(Parser&)>> parse_strategy = { 
        { "name", [&](Parser& p) { name = p.read_string(); } },
    };
}

```

I'd like `parse_strategy` to be a static member -- is that possible? If not I could think of some other way to get what I want.

Answer: 
No.

Just like with any static member function, there is no object context, so whose `name` would be captured?

Lambdas don't change the meaning of static member functions.
No. Static, like in other languages, means it belongs to the class. Classes don't have "default objects," so if you try to get a non-static member variable out of the class the compiler will throw up its hands in frustration, because where is it getting this `name` information from? The error would look something like

`Error: Cannot use non-static member variable in a static context.`

Lambdas don't change this.