I want a rule that finds cases where a std::optional
is initialized with a value and is never changed to std::nullopt
. Because in that case, it it tautologically true that the optional has a value, and it it is either a mistake to use an optional in the first place, since the variable could simply be the underlying type, or the variable was meant to be initialized from something that is a std::optional
in the first place.
std::optional<std::reference_wrapper<const Thing>> maybeThing();
const Thing &thing();
...
const std::optional maybeThing1 = thing(); // Should be flagged
const std::optional maybeThing2 = maybeThing(); // Compliant, candidate resolution
const Thing &actualThing = thing(); // Another candidate resolution
...