У меня есть этот код, который работает на GCC:
#include <map>
class Foo;
class Bar;
typedef std::map<Foo,Bar> MyMap;
MyMap::iterator i;
class Foo
{
MyMap::iterator some_data;
};
Код, разработанный в настоящее время (неприятно округлый, да, я застрял с ним) требует, чтобы map<Foo,Bar>::iterator
был доступен для Foo
и Bar
.
Это работает, потому что реализации библиотеки GCC не требуется создавать экземпляр типа ключа карты для создания итератора.
Это гарантировано? Стандарт, кажется, несколько непривычен, когда дело доходит до определения типа итератора карты. Насколько переносим этот код?