This check implements the typebased semantic of gsl::owner.
Meaning, that
- only gsl::owner is allowed to get deleted
- new expression must be assigned to gsl::owner
- function calls that expect gsl::owner as argument, must get either an owner or a newly created and recognized resource (in the moment only newed memory)
- assignment to gsl::owner must be either a resource or another owner
- functions returning an gsl::owner are considered as factories, and their result must be assigned to an gsl::owner
- classes that have an gsl::owner-member must declare a non-default destructor
There are some problems that occur when typededuction is in place.
For example auto Var = function_that_returns_owner(); the type of Var will not be
an gsl::owner. This case is catched, and explicitly noted.
But cases like fully templated functions
template <typename T> void f(T t) { delete t; } // ... f(gsl::owner<int*>(new int(42)));
Will created false positive (the deletion is problematic), since the type deduction
removes the wrapping typeAlias.
Please give your comments :)
Please remove this line.