Есть такой код:
#define GDMLExtReader_H 1
#ifndef _WIN32
#include <map>
#endif
class GDMLExtReader : public G4GDMLReadStructure
{
template Type* GetPtr(const G4String& name, const std::map<G4String, Type*>& l)
{
Type* ret = 0;
std::map<G4String, Type*>::const_iterator pos = l.find(name);
if (pos != l.end())
ret = pos->second;
else
{
G4String err_mess = "Attribute: " + name + " NOT found !";
G4Exception("GDMLExtReader", "ReadError", FatalException, err_mess);
}
return ret;
}
};
#endif
Под Visual Studio компилируется и работает, а при попытке откомпилировать с помощью gcc под Ubuntu, вываливается с ошибкой:
In member function Type* GDMLExtReader::GetPtr(const G4String&, const std::map<G4String, Type*, std::less, std::allocator<std::pair<const G4String, Type*> > >&)':
include/GDMLExtReader.hh: error: expected ;' before pos'
include/GDMLExtReader.hh: error: pos' was not declared in this scope
Если в функции создавать переменную, а не итератор, т.е. std::map<G4String, Type*> pos2, то все работает.
Ошибка проявляется именно при создании итератора.