#include<set>
template<typename X, typename = void>
struct A
{
std::pair<X,bool> foo (const X& i) { return std::pair<X,bool>(X(),true); } // choice
void foo (std::initializer_list<X> i) { return 0; }
};
template<typename Any, typename T>
T ReceiveFuncPtr (Any (T::*Method)(const int&))
{
T obj;
(obj.*Method)(1);
return obj;
}
int main ()
{
ReceiveFuncPtr(&A<int>::foo); // OK
}
I2luY2x1ZGU8c2V0PgoKdGVtcGxhdGU8dHlwZW5hbWUgWCwgdHlwZW5hbWUgPSB2b2lkPgpzdHJ1Y3QgQQp7CiAgc3RkOjpwYWlyPFgsYm9vbD4gZm9vIChjb25zdCBYJiBpKSB7IHJldHVybiBzdGQ6OnBhaXI8WCxib29sPihYKCksdHJ1ZSk7IH0gLy8gY2hvaWNlCiAgdm9pZCBmb28gKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxYPiBpKSB7IHJldHVybiAwOyB9IAp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgQW55LCB0eXBlbmFtZSBUPgpUIFJlY2VpdmVGdW5jUHRyIChBbnkgKFQ6OipNZXRob2QpKGNvbnN0IGludCYpKQp7CiAgVCBvYmo7CiAgKG9iai4qTWV0aG9kKSgxKTsKICByZXR1cm4gb2JqOwp9CgppbnQgbWFpbiAoKQp7CiAgUmVjZWl2ZUZ1bmNQdHIoJkE8aW50Pjo6Zm9vKTsgLy8gT0sKfQo=