/cp
[official-gcc.git] / gcc / testsuite / g++.dg / cpp1y / auto-fn39.C
blobb4ba29eb200e9af99ccfe843f67ad0f4cac06322
1 // PR c++/81045
2 // { dg-do compile { target c++14 } }
4 template<typename T> class vectorIterator;
6 template<typename T> class vector {
7   public:
8   auto get(unsigned int i) { return data[i]; }
10   auto begin() { return vectorIterator<T>{*this, 0}; }
11   auto end() { return vectorIterator<T>{*this, 10}; }
13   private:
14   T data[10] = {};
17 template<typename T> class vectorIterator {
18   public:
19   vectorIterator(vector<T>& self, unsigned int offset) : self(self), offset(offset) {}
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; }
25   private:
26   vector<T>& self;
27   unsigned int offset;
30 class Object {
31   public:
32   template<typename T> auto cast() -> T {
33     return T();
34   }
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   }
47 int main() { return 0; }