#include <type_traits>
#include <iostream>
#include <memory>
struct Holder{
virtual void inc() = 0;
virtual ~Holder() {}
};
template<class T>
struct HolderHelper : Holder{
HolderHelper(const T &t_) : t(t_){
}
void inc() final override{
t++;
}
T t;
};
struct Test{
template<class T>
Test(T &&t) : up(new HolderHelper<T>(std::forward<T>(t))){ //wieso gibts kein std::make_unique?
std::cout << "nicht const\n";
}
template<class T>
Test(const T &t) : up(new HolderHelper<T>(t)){
std::cout << "const\n";
}
std::unique_ptr<Holder> up;
};
int main() {
int i = 42;
Test t(i); //funktioniert wie es soll
const int ci = 42;
Test ct(ci); //funkitioniert nicht, weil T const ist
//T soll aber nicht const sein, sondern ein normales int
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxtZW1vcnk+CnN0cnVjdCBIb2xkZXJ7Cgl2aXJ0dWFsIHZvaWQgaW5jKCkgPSAwOwoJdmlydHVhbCB+SG9sZGVyKCkge30KfTsKIAp0ZW1wbGF0ZTxjbGFzcyBUPgpzdHJ1Y3QgSG9sZGVySGVscGVyIDogSG9sZGVyewoJSG9sZGVySGVscGVyKGNvbnN0IFQgJnRfKSA6IHQodF8pewogCgl9Cgl2b2lkIGluYygpIGZpbmFsIG92ZXJyaWRlewoJCXQrKzsKCX0KCVQgdDsKfTsKIApzdHJ1Y3QgVGVzdHsKCXRlbXBsYXRlPGNsYXNzIFQ+CglUZXN0KFQgJiZ0KSA6IHVwKG5ldyBIb2xkZXJIZWxwZXI8VD4oc3RkOjpmb3J3YXJkPFQ+KHQpKSl7IC8vd2llc28gZ2lidHMga2VpbiBzdGQ6Om1ha2VfdW5pcXVlPwoJCXN0ZDo6Y291dCA8PCAibmljaHQgY29uc3RcbiI7Cgl9Cgl0ZW1wbGF0ZTxjbGFzcyBUPgoJVGVzdChjb25zdCBUICZ0KSA6IHVwKG5ldyBIb2xkZXJIZWxwZXI8VD4odCkpewoJCXN0ZDo6Y291dCA8PCAiY29uc3RcbiI7Cgl9CglzdGQ6OnVuaXF1ZV9wdHI8SG9sZGVyPiB1cDsKfTsKIAppbnQgbWFpbigpIHsKCWludCBpID0gNDI7CglUZXN0IHQoaSk7IC8vZnVua3Rpb25pZXJ0IHdpZSBlcyBzb2xsCgljb25zdCBpbnQgY2kgPSA0MjsKCVRlc3QgY3QoY2kpOyAvL2Z1bmtpdGlvbmllcnQgbmljaHQsIHdlaWwgVCBjb25zdCBpc3QKCS8vVCBzb2xsIGFiZXIgbmljaHQgY29uc3Qgc2Vpbiwgc29uZGVybiBlaW4gbm9ybWFsZXMgaW50IAp9