template<int X, int Y>
struct S
{
typedef int func(int,float) const;
};
template<int X>
struct D : public S<X,6>
{
typename S<7,6>::func func;
};
template<int X>
int D<X>::func(int,float) const
{
return 1;
}
//----------------
struct W : public S<7,8>
{
S<7,8>::func func;
};
int W::func(int,float) const
{
return 2;
}
#include <iostream>
int main()
{
W w;
std::cout << w.func(1,4.3) << "\n";
D<3> d;
std::cout << d.func(1,4.3) << "\n";
}
dGVtcGxhdGU8aW50IFgsIGludCBZPgpzdHJ1Y3QgUwp7CiAgICB0eXBlZGVmIGludCBmdW5jKGludCxmbG9hdCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZTxpbnQgWD4Kc3RydWN0IEQgOiBwdWJsaWMgUzxYLDY+CnsKICAgIHR5cGVuYW1lIFM8Nyw2Pjo6ZnVuYyBmdW5jOwp9Owp0ZW1wbGF0ZTxpbnQgWD4KaW50IEQ8WD46OmZ1bmMoaW50LGZsb2F0KSBjb25zdAp7CiAgICByZXR1cm4gMTsKfQovLy0tLS0tLS0tLS0tLS0tLS0Kc3RydWN0IFcgOiBwdWJsaWMgUzw3LDg+CnsKICAgIFM8Nyw4Pjo6ZnVuYyBmdW5jOwp9OwppbnQgVzo6ZnVuYyhpbnQsZmxvYXQpIGNvbnN0CnsKICAgIHJldHVybiAyOwp9CgojaW5jbHVkZSA8aW9zdHJlYW0+CmludCBtYWluKCkKewogICAgVyB3OwogICAgc3RkOjpjb3V0IDw8IHcuZnVuYygxLDQuMykgPDwgIlxuIjsKICAgIEQ8Mz4gZDsKICAgIHN0ZDo6Y291dCA8PCBkLmZ1bmMoMSw0LjMpIDw8ICJcbiI7Cn0=