fork(1) download
  1. #include <iostream>
  2.  
  3. template<typename T>
  4. struct pair {
  5. const char *key; // никогда не изменяется, назначается только при инициализации 'pair'
  6. T &val;
  7. };
  8.  
  9. template<typename T>
  10. void set(const pair<T> &pair) {
  11. // тут все хорошо, используем 'pair.key' и 'pair.val'
  12. }
  13.  
  14. template<typename T>
  15. void get(pair<T> &&pair) {
  16. // тут все плохо, ибо 'pair.val' - константная ссылка
  17. pair.val = 789;
  18. }
  19.  
  20. int main() {
  21. int rint=0;
  22. pair<int> pi{"int", 33};
  23.  
  24. set(pair<int>{"int", rint});
  25. set(pi);
  26.  
  27. ////////////////////////////////
  28. get(pair<int>{"int", rint});
  29. std::cout << "rint = " << rint << std::endl;
  30. return 0;
  31. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In function 'int main()':
prog.cpp:22:25: error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'
   pair<int> pi{"int", 33};
                         ^
stdout
Standard output is empty