On 3/22/23 14:23, Daniela Engert via Boost wrote:
Am 22.03.2023 um 11:24 schrieb Andrey Semashev via Boost:
[[nodiscard]] is not usable here as there's nothing to apply it to, as we're talking about the scope guard constructor.
[[nodiscard]] is highly desirable here. You can apply the attribute to class types (and thus their constructors) and avoid the (typically unwanted) immediate destruction of pr-values. Manager classes should be marked [[nodiscard]] by habit.
I didn't know you can apply [[nodiscard]] to classes, but apparently you can. I suppose, I could mark scope guards with it, but I'm not sure if limiting the use cases would be desirable. For example, should we consider the following a wrong use of the scope guard? auto foo() { // do something useful and return the epilogue return scope_exit([] { whatever }); } void bar() { foo(); // do what foo() does, plus the epilogue // ... } void zoo() { auto epilogue = foo(); // do what foo() does, and delay the epilogue // ... }