#include <iostream>
using namespace std;
class base
{
public:
template<class T> int func();
// ^^^^^
// use class keyword
}; // <-- semicolon here
template<class T>
// ^^^^^
// use class keyword
int base::func()
{
cout << "base::func called" << endl;
return 0;
}
class derived : public base
// ^
// no colon here
{
public:
void caller()
{
func<int>(); // it works
base::func<int>(); // this works too
}
}; // <-- semicolon here
int main()
{
derived d;
d.caller();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgYmFzZQp7CiAgICBwdWJsaWM6CiAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBpbnQgZnVuYygpOwogICAgLy8gICAgICAgXl5eXl4KICAgIC8vICAgICAgIHVzZSBjbGFzcyBrZXl3b3JkCgp9OyAvLyA8LS0gc2VtaWNvbG9uIGhlcmUKCnRlbXBsYXRlPGNsYXNzIFQ+Ci8vICAgICAgIF5eXl5eCi8vICAgICAgIHVzZSBjbGFzcyBrZXl3b3JkCmludCBiYXNlOjpmdW5jKCkKewoJY291dCA8PCAiYmFzZTo6ZnVuYyBjYWxsZWQiIDw8IGVuZGw7CiAgICByZXR1cm4gMDsKfQoKY2xhc3MgZGVyaXZlZCA6IHB1YmxpYyBiYXNlCi8vICAgICAgICAgICAgICAgICAgICBeCi8vICAgICAgICAgICAgICAgICAgICBubyBjb2xvbiBoZXJlCnsKcHVibGljOgogICAgdm9pZCAgY2FsbGVyKCkKICAgIHsgCiAgICAgICAgZnVuYzxpbnQ+KCk7IC8vIGl0IHdvcmtzCiAgICAgICAgYmFzZTo6ZnVuYzxpbnQ+KCk7ICAgIC8vIHRoaXMgd29ya3MgdG9vCiAgICB9Cn07IC8vIDwtLSBzZW1pY29sb24gaGVyZQoKCmludCBtYWluKCkKewoJZGVyaXZlZCBkOwoJZC5jYWxsZXIoKTsKfQ==