fork download
  1. #include <iostream>
  2.  
  3. struct array
  4. {
  5. int i = 0;
  6. array() {}
  7. const int &operator[](size_t) const { std::cout << "const int[]\n"; return i; }
  8. int &operator[](size_t) { std::cout << "int[]\n"; return i; }
  9. };
  10.  
  11. int main()
  12. {
  13. array a;
  14. a[0];
  15. int v1 = a[0];
  16. const int v2 = a[0];
  17. std::cout << "refs\n";
  18. int& v3 = a[0];
  19. const int& v4 = a[0];
  20. std::cout << "const array\n";
  21. const array b;
  22. b[0];
  23. int v5 = b[0];
  24. const int v6 = b[0];
  25. std::cout << "refs\n";
  26. //int& v7 = b[0]; // would produce a compile error
  27. const int& v8 = b[0];
  28. }
  29.  
Success #stdin #stdout 0s 3096KB
stdin
Standard input is empty
stdout
int[]
int[]
int[]
refs
int[]
int[]
const array
const int[]
const int[]
const int[]
refs
const int[]