#include <iostream>
using namespace std;
struct Flyable{
int loadConcreteData(){
cout << "Flyable\n"; return 0;
}
};
struct Drivable{
int loadConcreteData(){
cout << "Drivable\n"; return 0;
}
};
class Object{
virtual void loadData(){
}
};
template<class ...CS>
struct ConcreteLoader : Object, CS... {
void loadData() override {
int load[] = {
this->CS::loadConcreteData()...
};
}
};
class FlyingCar : public ConcreteLoader<Flyable,Drivable>{
};
int main() {
FlyingCar fc;
fc.loadData();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEZseWFibGV7CiAgaW50IGxvYWRDb25jcmV0ZURhdGEoKXsKICAJY291dCA8PCAiRmx5YWJsZVxuIjsgcmV0dXJuIDA7CiAgfQp9OwoKc3RydWN0IERyaXZhYmxlewogIGludCBsb2FkQ29uY3JldGVEYXRhKCl7CiAgCSBjb3V0IDw8ICJEcml2YWJsZVxuIjsgcmV0dXJuIDA7CiAgfQp9OwoKY2xhc3MgT2JqZWN0ewogIHZpcnR1YWwgdm9pZCBsb2FkRGF0YSgpewogIH0KfTsKCnRlbXBsYXRlPGNsYXNzIC4uLkNTPgpzdHJ1Y3QgQ29uY3JldGVMb2FkZXIgOiBPYmplY3QsIENTLi4uIHsKICAJdm9pZCBsb2FkRGF0YSgpIG92ZXJyaWRlIHsKICAJCWludCBsb2FkW10gPSB7CiAgCQkJdGhpcy0+Q1M6OmxvYWRDb25jcmV0ZURhdGEoKS4uLgogIAkJfTsKICAJfQp9OwoKY2xhc3MgRmx5aW5nQ2FyIDogcHVibGljIENvbmNyZXRlTG9hZGVyPEZseWFibGUsRHJpdmFibGU+ewp9OwoKaW50IG1haW4oKSB7CglGbHlpbmdDYXIgZmM7CglmYy5sb2FkRGF0YSgpOwoJcmV0dXJuIDA7Cn0=