fork download
  1. #include <type_traits>
  2. #include <iostream>
  3. #include <memory>
  4. struct Holder{
  5. virtual void inc() = 0;
  6. virtual ~Holder() {}
  7. };
  8.  
  9. template<class T>
  10. struct HolderHelper : Holder{
  11. HolderHelper(const T &t_) : t(t_){
  12.  
  13. }
  14. void inc() final override{
  15. t++;
  16. }
  17. T t;
  18. };
  19.  
  20. struct Test{
  21. template<class T>
  22. Test(T &&t) : up(new HolderHelper<T>(std::forward<T>(t))){ //wieso gibts kein std::make_unique?
  23. std::cout << "nicht const\n";
  24. }
  25. template<class T>
  26. Test(const T &t) : up(new HolderHelper<T>(t)){
  27. std::cout << "const\n";
  28. }
  29. std::unique_ptr<Holder> up;
  30. };
  31.  
  32. int main() {
  33. int i = 42;
  34. Test t(i); //funktioniert wie es soll
  35. const int ci = 42;
  36. Test ct(ci); //funkitioniert nicht, weil T const ist
  37. //T soll aber nicht const sein, sondern ein normales int
  38. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
nicht const
const