Проблема вызвана (я думаю, жестко заданным) ограничением в отладчике Visual Studio. Чтобы отобразить одну переменную, отладчик адаптирует то, что он находит в файле .natvis, но он отказывается после некоторого фиксированного количества попыток разрешить тип.
Решение этой проблемы заключается в использовании что-то вроде std :: any
(или boost :: any для тех из нас, кто не благословлен возможностью использовать последнюю версию C ++)
, чтобы разбить этот тип STL на фрагменты, которые отладчик может иметь дело с. Это, конечно, только обходной путь. Будем надеяться, что эта проблема скоро будет решена.
#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <set>
#include <any>
#include <memory>
typedef std::shared_ptr<std::string> PTR_STRING;
typedef std::map<PTR_STRING, long> accessFunction2Order;
typedef std::set<accessFunction2Order> setOfAccessFunction2Order;
#if 1
typedef std::map<std::vector<std::size_t>, std::any> A2B;
#else
typedef std::map<std::vector<std::size_t>, setOfAccessFunction2Order> A2B;
#endif
typedef std::map<PTR_STRING, std::shared_ptr<A2B> > MAP;
typedef std::shared_ptr<std::size_t> PTR_INT;
int main()
{ const MAP s{
{ std::make_shared<std::string>("asdasdasdasdasdasdasdasdasdasd"),
std::make_shared<A2B>()
}
};
}