template<typename T> struct A
{
};
template<typename C, typename T> struct A<T C::*>
{
int fail[sizeof(T) - 1000];
};
template<typename C, typename T> struct A<T (C::*)()>
{
int ok;
};
struct C
{
int f() const { }
int g() { }
};
template <typename T>
void make(T val)
{
A<T> a;
}
int main()
{
make(&C::f);
make(&C::g);
}
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEEKewp9Owp0ZW1wbGF0ZTx0eXBlbmFtZSBDLCB0eXBlbmFtZSBUPiBzdHJ1Y3QgQTxUIEM6Oio+CnsKICBpbnQgZmFpbFtzaXplb2YoVCkgLSAxMDAwXTsKfTsKdGVtcGxhdGU8dHlwZW5hbWUgQywgdHlwZW5hbWUgVD4gc3RydWN0IEE8VCAoQzo6KikoKT4KewogIGludCBvazsKfTsKCnN0cnVjdCBDCnsKICBpbnQgZigpIGNvbnN0IHsgfQogIGludCBnKCkgeyB9Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kdm9pZCBtYWtlKFQgdmFsKQp7CiAgQTxUPiBhOwp9CgppbnQgbWFpbigpCnsKICBtYWtlKCZDOjpmKTsKICBtYWtlKCZDOjpnKTsKfQo=