#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
template<class T> class CList : public std::list<T>
{
public:
template<class Pred> bool Contain(Pred p)
{
return std::find_if(this->begin(), this->end(), p) != this->end();
}
bool Contain(const T & v)
{
return std::find(this->begin(), this->end(), v) != this->end();
}
};
int main()
{
CList<int> a;
a.Contain([](auto i){ return i == 5; }); //ok
a.Contain(5); //term does not evaluate to a function taking 1 arguments
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBDTGlzdCA6IHB1YmxpYyBzdGQ6Omxpc3Q8VD4KICAgIHsKICAgICAgICBwdWJsaWM6CgogICAgICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBQcmVkPiBib29sIENvbnRhaW4oUHJlZCBwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpmaW5kX2lmKHRoaXMtPmJlZ2luKCksIHRoaXMtPmVuZCgpLCBwKSAhPSB0aGlzLT5lbmQoKTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICAgIGJvb2wgQ29udGFpbihjb25zdCBUICYgdikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6ZmluZCh0aGlzLT5iZWdpbigpLCB0aGlzLT5lbmQoKSwgdikgIT0gdGhpcy0+ZW5kKCk7CiAgICAgICAgICAgIH0KICAgIH07CgppbnQgbWFpbigpCnsKICBDTGlzdDxpbnQ+ICBhOwogIGEuQ29udGFpbihbXShhdXRvIGkpeyByZXR1cm4gaSA9PSA1OyB9KTsgLy9vawogIGEuQ29udGFpbig1KTsgICAgIC8vdGVybSBkb2VzIG5vdCBldmFsdWF0ZSB0byBhIGZ1bmN0aW9uIHRha2luZyAxIGFyZ3VtZW50cwp9