blob: b4ba29eb200e9af99ccfe843f67ad0f4cac06322 [file] [log] [blame]
// 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; }