#pragma once namespace matcher { template struct predicate_t { Pred predicate; }; template bool operator==(T const & t, predicate_t const & of) { return of.predicate(t); } template predicate_t matches(Pred && args) { return {args}; } }