Issue title: ES.28: use st38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5invoke to call the lambda
 Issue body: Now that C++17 has `st38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5invoke`, we could make use of it when doing complex initialization with lambdas. It improves readability, as it becomes clear that you are calling the lambda right away, rather than finding out about it later at the end of a lambda. Example:

Without `st38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5invoke`:

```
const widget x = [&]{
    widget val;                                // assume that widget has a default constructor
    for (auto i = 2; i <= N; ++i) {            // this could be some
        val += some_obj.do_something_with(i);  // arbitrarily long code
    }                                          // needed to initialize x
    return val;
}();
```

With `st38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5invoke`:

```
const widget x = st38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5invoke([&]{
    widget val;                                // assume that widget has a default constructor
    for (auto i = 2; i <= N; ++i) {            // this could be some
        val += some_obj.do_something_with(i);  // arbitrarily long code
    }                                          // needed to initialize x
    return val;
});
```

 Comments: 
 Comment 0: `st38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5invoke` is not `constexpr` ([[func.invoke]](http://eel.is/c++draft/func.invoke)), while lambdas can be used in constant expressions (as of C++17, as well). So you can use the first form, but not the second form, for a `constexpr widget x`. Although perhaps `st38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5invoke` could be fixed to allow this.
 Comment 1: The version with `st38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5invoke` is a few characters longer, but the improvement in readability isn't apparent.
There might be other cases where `st38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5invoke` might be the right choice, but this particular instance isn't one of them.
 Comment 2: N.B. GB 51 in [P0488](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0488r0.pdf) proposed making `st38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5invoke` constexpr, but was not accepted for C++17.
 Comment 3: I use that syntax and was just about to fill similar issue. To me st38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5invoke() makes it obvious that it's the result of an invocation that's assigned, otherwise it just looks like typical lambda assigned to a variable.

Non-constexprness might be a problem in some cases. In such cases I'd use () and add a NOTE comment or something to make the intent clear.
 Comment 4: I agree. @feroldi 's first example reads like a [garden path sentence ](https://en.wikipedia.org/wiki/Garden-path_sentence). The st38d1:d2b4:3d06:83e8:96a5:8c2:893d:aba5invoke option seems clearly easier for a human to parse to me. It's not so clear whether that justifies the extra characters or the sacrifice of constexpr until c++20.
{'source': 'GithubIssues', 'repo_name_with_owner': 'isocpp/CppCoreGuidelines', 'issue_id': 223538312, 'repo_stars': 38023.0}