//Zeile 24, 28 und 38 sind interessant
#include <type_traits>
#include <iostream>
#include <memory>
struct Holder{
virtual void inc( ) = 0 ;
virtual ~Holder( ) ;
} ;
template < class T>
struct HolderHelper : Holder{
HolderHelper( 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< typename std:: remove_const < T> :: type > ( 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
}
Ly9aZWlsZSAyNCwgMjggdW5kIDM4IHNpbmQgaW50ZXJlc3NhbnQKCiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgpzdHJ1Y3QgSG9sZGVyewoJdmlydHVhbCB2b2lkIGluYygpID0gMDsKCXZpcnR1YWwgfkhvbGRlcigpOwkKfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CnN0cnVjdCBIb2xkZXJIZWxwZXIgOiBIb2xkZXJ7CglIb2xkZXJIZWxwZXIoVCAmdF8pIDogdCh0Xyl7CgkJCgl9Cgl2b2lkIGluYygpIGZpbmFsIG92ZXJyaWRlewoJCXQrKzsKCX0KCVQgdDsKfTsKCnN0cnVjdCBUZXN0ewoJdGVtcGxhdGU8Y2xhc3MgVD4KCVRlc3QoVCAmJnQpIDogdXAobmV3IEhvbGRlckhlbHBlcjxUPihzdGQ6OmZvcndhcmQ8VD4odCkpKXsgLy93aWVzbyBnaWJ0cyBrZWluIHN0ZDo6bWFrZV91bmlxdWU/CgkJc3RkOjpjb3V0IDw8ICJuaWNodCBjb25zdFxuIjsKCX0KCXRlbXBsYXRlPGNsYXNzIFQ+CglUZXN0KGNvbnN0IFQgJiZ0KSA6IHVwKG5ldyBIb2xkZXJIZWxwZXI8dHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8VD46OnR5cGU+KHQpKXsKCQlzdGQ6OmNvdXQgPDwgImNvbnN0XG4iOwoJfQoJc3RkOjp1bmlxdWVfcHRyPEhvbGRlcj4gdXA7Cn07CgppbnQgbWFpbigpIHsKCWludCBpID0gNDI7CglUZXN0IHQoaSk7IC8vZnVua3Rpb25pZXJ0IHdpZSBlcyBzb2xsCgljb25zdCBpbnQgY2kgPSA0MjsKCVRlc3QgY3QoY2kpOyAvL2Z1bmtpdGlvbmllcnQgbmljaHQsIHdlaWwgVCBjb25zdCBpc3QKCS8vVCBzb2xsIGFiZXIgbmljaHQgY29uc3Qgc2Vpbiwgc29uZGVybiBlaW4gbm9ybWFsZXMgaW50IAp9