diff options
| author | Boaz Brickner <brickner@google.com> | 2024-10-30 08:59:49 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-30 08:59:49 +0100 |
| commit | 9c8dab018dee3143c28a7d7f5fdb32385da36101 (patch) | |
| tree | 6c6d689a9c11ee5ee0fc9347c737e31aa662f04a | |
| parent | 362273d1435c0cc104418f88b0140d0388e9ee22 (diff) | |
[clang] Update the lifetimebound example with up-to-date expected warning and change the sample code to be a fully working example (#113437)
Tested the code: https://godbolt.org/z/n5xcq65YM
Tested the generated documentation:

| -rw-r--r-- | clang/include/clang/Basic/AttrDocs.td | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/clang/include/clang/Basic/AttrDocs.td b/clang/include/clang/Basic/AttrDocs.td index 7a130c434e73..fbbfc4acdf39 100644 --- a/clang/include/clang/Basic/AttrDocs.td +++ b/clang/include/clang/Basic/AttrDocs.td @@ -3702,20 +3702,32 @@ user-declared functions. For example: .. code-block:: c++ + #include <map> + #include <string> + + using namespace std::literals; + // Returns m[key] if key is present, or default_value if not. template<typename T, typename U> const U &get_or_default(const std::map<T, U> &m [[clang::lifetimebound]], const T &key, /* note, not lifetimebound */ - const U &default_value [[clang::lifetimebound]]); + const U &default_value [[clang::lifetimebound]]) { + if (auto iter = m.find(key); iter != m.end()) return iter->second; + else return default_value; + } - std::map<std::string, std::string> m; - // warning: temporary "bar"s that might be bound to local reference 'val' - // will be destroyed at the end of the full-expression - const std::string &val = get_or_default(m, "foo"s, "bar"s); + int main() { + std::map<std::string, std::string> m; + // warning: temporary bound to local reference 'val1' will be destroyed + // at the end of the full-expression + const std::string &val1 = get_or_default(m, "foo"s, "bar"s); - // No warning in this case. - std::string def_val = "bar"s; - const std::string &val = get_or_default(m, "foo"s, def_val); + // No warning in this case. + std::string def_val = "bar"s; + const std::string &val2 = get_or_default(m, "foo"s, def_val); + + return 0; + } The attribute can be applied to the implicit ``this`` parameter of a member function by writing the attribute after the function type: |
