#include <iostream>
#include <vector>
class Dataset {
public:
virtual void doSomething(int& data) = 0;
};
template<typename T1, typename T2>
class Dataset_impl : public Dataset
{
protected:
std::vector<std::pair<T1, T2> > _data_buffer;
void doSomething(int &x) {};
};
template <typename T1=std::string, typename T2=std::string>
class OnlineDataset : public Dataset
{
public:
void doSomething(int& data) override {};
};
template<typename T1, typename T2>
void foo(Dataset_impl<T1, T2> x) {}
int main() {
Dataset_impl<int, int> y;
foo(y);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKY2xhc3MgRGF0YXNldCB7CnB1YmxpYzoKICAgdmlydHVhbCB2b2lkIGRvU29tZXRoaW5nKGludCYgZGF0YSkgPSAwOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPiAKY2xhc3MgRGF0YXNldF9pbXBsIDogcHVibGljIERhdGFzZXQKewpwcm90ZWN0ZWQ6CiAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxUMSwgVDI+ID4gX2RhdGFfYnVmZmVyOwogICB2b2lkIGRvU29tZXRoaW5nKGludCAmeCkge307Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVDE9c3RkOjpzdHJpbmcsIHR5cGVuYW1lIFQyPXN0ZDo6c3RyaW5nPgpjbGFzcyBPbmxpbmVEYXRhc2V0IDogcHVibGljIERhdGFzZXQKewpwdWJsaWM6CiAgICB2b2lkIGRvU29tZXRoaW5nKGludCYgZGF0YSkgb3ZlcnJpZGUge307Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CnZvaWQgZm9vKERhdGFzZXRfaW1wbDxUMSwgVDI+IHgpIHt9CgppbnQgbWFpbigpIHsKCURhdGFzZXRfaW1wbDxpbnQsIGludD4geTsKCWZvbyh5KTsKCXJldHVybiAwOwp9