fork download
  1. //Zeile 24, 28 und 38 sind interessant
  2.  
  3. #include <type_traits>
  4. #include <iostream>
  5. #include <memory>
  6. struct Holder{
  7. virtual void inc() = 0;
  8. virtual ~Holder();
  9. };
  10.  
  11. template<class T>
  12. struct HolderHelper : Holder{
  13. HolderHelper(T &t_) : t(t_){
  14.  
  15. }
  16. void inc() final override{
  17. t++;
  18. }
  19. T t;
  20. };
  21.  
  22. struct Test{
  23. template<class T>
  24. Test(T &&t) : up(new HolderHelper<T>(std::forward<T>(t))){ //wieso gibts kein std::make_unique?
  25. std::cout << "nicht const\n";
  26. }
  27. template<class T>
  28. Test(const T &&t) : up(new HolderHelper<typename std::remove_const<T>::type>(t)){
  29. std::cout << "const\n";
  30. }
  31. std::unique_ptr<Holder> up;
  32. };
  33.  
  34. int main() {
  35. int i = 42;
  36. Test t(i); //funktioniert wie es soll
  37. const int ci = 42;
  38. Test ct(ci); //funkitioniert nicht, weil T const ist
  39. //T soll aber nicht const sein, sondern ein normales int
  40. }
Compilation error #stdin compilation error #stdout 0s 3296KB
stdin
Standard input is empty
compilation info
prog.cpp: In instantiation of ‘void HolderHelper<T>::inc() [with T = const int&]’:
prog.cpp:40:1:   required from here
prog.cpp:17:4: error: increment of read-only location ‘((HolderHelper<const int&>*)this)->HolderHelper<const int&>::t’
   t++;
    ^
stdout
Standard output is empty