On 21 June 2015 at 16:56, Julian Klappenbach wrote: > Version info: > > Configured with: > --prefix=/Applications/Xcode.app/Contents/Developer/usr > --with-gxx-include-dir=/usr/include/c++/4.2.1 > Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn) > Target: x86_64-apple-darwin14.3.0 > Thread model: posix
You're not using GCC, you're using LLVM. Even if you were using GCC "is this a bug?" questions are off-topic on this list, they belong in the Bugzilla bug tracker or the gcc-help mailing list, not here. > Since I have many different types of iterators, I had created a basic > interface to pass them around, an abstract virtual class with pure > virtual members. The problem occurs when the logic behind the range > based for loop calls begin, and receives the pure virtual base class > of the iterator. This causes the compiler error: > > ../src/ListTests.cpp:156:13: error: variable type 'Iterable<int>' is > an abstract class It sounds like your begin() function is declared to return an abstract class by value, that is not possible in C++. THis has nothign to do with range-based for, you just can't return an abstract class type from a function.