#include <iostream>
template <typename T> struct Foo {
void CallBar () {
Bar();
}
virtual void Bar() {
int meow = 5;
SelectiveFoo( meow );
};
template <typename S> void SelectiveFoo ( S selective ) {
std::cout << "Kung ~Foo~!\n";
}
};
struct Baz : public Foo<int> {
/*void Bar () {
std::cout << "Bars everywhere, bitches.\n";
}*/
template <typename S> void SelectiveFoo (S selective) {
std::cout << "For the greater good, and for Bazzes everywhere!\n";
}
};
int main (int argc, char* argv[]) {
Baz baz;
baz.CallBar();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBGb28gewogICAgCiAgICB2b2lkIENhbGxCYXIgKCkgewogICAgICAgIEJhcigpOwogICAgfQogICAgCiAgICB2aXJ0dWFsIHZvaWQgQmFyKCkgewogICAgICAgIGludCBtZW93ID0gNTsKICAgICAgICBTZWxlY3RpdmVGb28oIG1lb3cgKTsgICAgCiAgICB9OwogICAgCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUz4gdm9pZCBTZWxlY3RpdmVGb28gKCBTIHNlbGVjdGl2ZSApIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIkt1bmcgfkZvb34hXG4iOwogICAgfQp9OwoKc3RydWN0IEJheiA6IHB1YmxpYyBGb288aW50PiB7CiAgICAKICAgIC8qdm9pZCBCYXIgKCkgewogICAgICAgIHN0ZDo6Y291dCA8PCAiQmFycyBldmVyeXdoZXJlLCBiaXRjaGVzLlxuIjsKICAgIH0qLwogICAgCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUz4gdm9pZCBTZWxlY3RpdmVGb28gKFMgc2VsZWN0aXZlKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJGb3IgdGhlIGdyZWF0ZXIgZ29vZCwgYW5kIGZvciBCYXp6ZXMgZXZlcnl3aGVyZSFcbiI7CiAgICB9CiAgICAKfTsKCmludCBtYWluIChpbnQgYXJnYywgY2hhciogYXJndltdKSB7CiAgICAKICAgIEJheiBiYXo7CiAgICBiYXouQ2FsbEJhcigpOwogICAgCn0=