This patch fixes __not_null's detection of nullptr by breaking it down into 4 cases.
- __not_null(Tp const&): Default case. Tp is not null.
- __not_null(Tp* __ptr); Case for pointers to functions.
- __not_null(_Ret _Class::* __ptr); Case for pointers to members.
- __not_null(function<Tp> const&);: Cases for other std::functions.
Where is __functional_03 getting the definition of __not_null from?
It doesn't include any other headers.