У меня есть этот код, который работает на 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 не требуется создавать экземпляр типа ключа карты для создания экземпляра итератора.
Это гарантировано? Стандарт, кажется, несколько непривычен, когда дело доходит до определения типа итератора карты. Насколько переносим этот код?