Viewing file: auto-fn39.C (1.06 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// PR c++/81045 // { dg-do compile { target c++14 } }
template<typename T> class vectorIterator;
template<typename T> class vector { public: auto get(unsigned int i) { return data[i]; }
auto begin() { return vectorIterator<T>{*this, 0}; } auto end() { return vectorIterator<T>{*this, 10}; }
private: T data[10] = {}; };
template<typename T> class vectorIterator { public: vectorIterator(vector<T>& self, unsigned int offset) : self(self), offset(offset) {}
auto operator*() -> T& { return self.get(offset); } auto operator!=(const vectorIterator& source) -> bool { return offset != source.offset; } auto operator++() -> vectorIterator& { ++offset; return *this; }
private: vector<T>& self; unsigned int offset; };
class Object { public: template<typename T> auto cast() -> T { return T(); } };
class Group : public Object { public: template<typename T = Object> auto objects() const -> void { vector<Object> easyObjects; for(auto obj : easyObjects) { auto casted = obj.cast<T>(); } } };
int main() { return 0; }
|