111
|
1 // PR c++/81045
|
|
2 // { dg-do compile { target c++14 } }
|
|
3
|
|
4 template<typename T> class vectorIterator;
|
|
5
|
|
6 template<typename T> class vector {
|
|
7 public:
|
|
8 auto get(unsigned int i) { return data[i]; }
|
|
9
|
|
10 auto begin() { return vectorIterator<T>{*this, 0}; }
|
|
11 auto end() { return vectorIterator<T>{*this, 10}; }
|
|
12
|
|
13 private:
|
|
14 T data[10] = {};
|
|
15 };
|
|
16
|
|
17 template<typename T> class vectorIterator {
|
|
18 public:
|
|
19 vectorIterator(vector<T>& self, unsigned int offset) : self(self), offset(offset) {}
|
|
20
|
|
21 auto operator*() -> T& { return self.get(offset); }
|
|
22 auto operator!=(const vectorIterator& source) -> bool { return offset != source.offset; }
|
|
23 auto operator++() -> vectorIterator& { ++offset; return *this; }
|
|
24
|
|
25 private:
|
|
26 vector<T>& self;
|
|
27 unsigned int offset;
|
|
28 };
|
|
29
|
|
30 class Object {
|
|
31 public:
|
|
32 template<typename T> auto cast() -> T {
|
|
33 return T();
|
|
34 }
|
|
35 };
|
|
36
|
|
37 class Group : public Object {
|
|
38 public:
|
|
39 template<typename T = Object> auto objects() const -> void {
|
|
40 vector<Object> easyObjects;
|
|
41 for(auto obj : easyObjects) {
|
|
42 auto casted = obj.cast<T>();
|
|
43 }
|
|
44 }
|
|
45 };
|
|
46
|
|
47 int main() { return 0; }
|
|
48
|