comparison gcc/testsuite/g++.dg/cpp1y/auto-fn39.C @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
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