You can use your own utility predicate:
struct is_nullptr { template <typename T> bool operator()(T&& x) const noexcept { return x == nullptr; } }; void doSomething(const std::vector<std::shared_ptr<Foo> >& pFoos) { assert(!std::any_of(pFoos.begin(), pFoos.end(), is_nullptr{});
And / or your own “range statement”:
template <typename TContainer, typename TPredicate> void range_assert(TContainer&& container, TPredicate&& p) { for(auto&& x : container) { assert(p(x)); } } void doSomething(const std::vector<std::shared_ptr<Foo> >& pFoos) { range_assert(pFoos, [](const std::shared_ptr<Foo>& x) { return x; });
source share