fork(1) download
  1. #include <vector>
  2.  
  3. template <typename R>
  4. class Proxy {
  5. public:
  6. Proxy(R& r) :range{ r } {}
  7. auto begin() const { return range.begin(); }
  8. auto end() const { return range.end(); }
  9. private:
  10. R& range;
  11. };
  12.  
  13. class C {
  14. using Type = std::vector<int>;
  15.  
  16. public:
  17. auto data() { return Proxy<Type>(data_); }
  18. auto data() const {
  19. return Proxy<Type>(data_);
  20. }
  21. private:
  22. Type data_;
  23. };
  24.  
  25. int main()
  26. {
  27. C c;
  28. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In member function ‘auto C::data() const’:
prog.cpp:19:22: error: binding reference of type ‘std::vector<int>&’ to ‘const Type’ {aka ‘const std::vector<int>’} discards qualifiers
   return Proxy<Type>(data_);
                      ^~~~~
prog.cpp:6:2: note:   initializing argument 1 of ‘Proxy<R>::Proxy(R&) [with R = std::vector<int>]’
  Proxy(R& r) :range{ r } {}
  ^~~~~
stdout
Standard output is empty