I get the following compilation error:
error: expected `;' before 'it''
Here’s my code:
#include <boost/function.hpp> #include <list> template< class T > void example() { std::list< boost::function<T ()> >::iterator it; }
Why does this happen? How can I fix it?
You need to put
typenamein front of that line, since the type you do ::iterator upon is dependant on the template-parameter T. Like this:Consider the line
which could mean a multiplication, or a pointer. That’s why you need
typenameto make your intention clear. Without it, the compiler assumes not a type, and thus it requires an operator there or a semicolon syntactically.Also consult the new C++ FAQ entry Where to put template and typename on dependent names.