C++ (Qt)#include <memory>#include <gsl/pointers> using namespace std; int main(){ gsl::not_null<unique_ptr<int>> unique_p{make_unique<int>(42)}; gsl::not_null<shared_ptr<int>> shared_p{make_shared<int>(42)}; return 0;}
/opt/Library/GSL/include/gsl/pointers:81: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete<int>]’ 81 | constexpr not_null(T u) : ptr_(u) | ^
not_null<unique_ptr<int>> p(make_unique(42));p.get().release(); // oops контракт нарушен
unique_ptr<int> p = foo();p.release(); // okbar(move(p)); // ok
const unique_ptr<int> p = foo();p.release(); // !ok, не скомпилится, хорошоbar(move(p)); // тоже !ok, а вот это было бы неплохо скомпилить