#include <set>
struct Base
{
virtual int F(int);
};
struct Derived : public Base
{
int F(int);
};
template<typename Type, typename Return, typename Parameter, Return (Type::*)(Parameter)> struct W
{
};
int main(int argc, char **argv)
{
typedef std::set<int> setint;
std::pair<setint::iterator, bool> (setint::*p_1)(const setint::value_type &) = &setint::insert;
W<setint, std::pair<setint::iterator, bool>, const setint::value_type &, &setint::insert> w_1;
int (Derived::*p_2)(int) = &Derived::F;
W<Derived, int, int, &Derived::F> w_2;
return 0;
}
I2luY2x1ZGUgPHNldD4KCnN0cnVjdCBCYXNlCnsKICAgIHZpcnR1YWwgaW50IEYoaW50KTsKfTsKCnN0cnVjdCBEZXJpdmVkIDogcHVibGljIEJhc2UKewogICAgaW50IEYoaW50KTsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFR5cGUsIHR5cGVuYW1lIFJldHVybiwgdHlwZW5hbWUgUGFyYW1ldGVyLCBSZXR1cm4gKFR5cGU6OiopKFBhcmFtZXRlcik+IHN0cnVjdCBXCnsKfTsKCmludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKewoJdHlwZWRlZiBzdGQ6OnNldDxpbnQ+IHNldGludDsKCglzdGQ6OnBhaXI8c2V0aW50OjppdGVyYXRvciwgYm9vbD4gKHNldGludDo6KnBfMSkoY29uc3Qgc2V0aW50Ojp2YWx1ZV90eXBlICYpID0gJnNldGludDo6aW5zZXJ0OwoJVzxzZXRpbnQsIHN0ZDo6cGFpcjxzZXRpbnQ6Oml0ZXJhdG9yLCBib29sPiwgY29uc3Qgc2V0aW50Ojp2YWx1ZV90eXBlICYsICZzZXRpbnQ6Omluc2VydD4gd18xOwoKICAgIGludCAoRGVyaXZlZDo6KnBfMikoaW50KSA9ICZEZXJpdmVkOjpGOwoJVzxEZXJpdmVkLCBpbnQsIGludCwgJkRlcml2ZWQ6OkY+IHdfMjsKCglyZXR1cm4gMDsKfQo=