fork(1) download
  1. #include <map>
  2. #include <iostream>
  3.  
  4. struct pair_wrapper
  5. {
  6. int &first;
  7. float& second;
  8.  
  9. pair_wrapper* operator->() { return this; }
  10. };
  11.  
  12. struct thing {
  13. float f[1];
  14. typedef std::pair<int,float> key_data;
  15.  
  16. struct iterator {
  17. int pos;
  18. float *f;
  19. pair_wrapper operator*() { return pair_wrapper{pos,f[pos]}; }
  20. pair_wrapper operator->() { return pair_wrapper{pos,f[pos]}; }
  21. };
  22.  
  23. iterator begin() { return {0, f}; }
  24. };
  25.  
  26. template<typename T> void test(T iter) {
  27. (*iter).second = 1.0; std::cout << (*iter).second;
  28.  
  29. iter->second = 2.0; std::cout << iter->second;
  30. }
  31.  
  32. int main() {
  33. std::map<int,float> fmap; fmap[0] = 0.0;
  34. test(fmap.begin());
  35. std::cout << fmap[0];
  36.  
  37. thing f;
  38. test(f.begin());
  39. std::cout << f.f[0];
  40. }
  41.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
122122