Я пишу Clang Checker, где ключ моего состояния ProgramMap должен быть std :: string.
В большинстве примеров, которые я видел до сих пор, в качестве ключа используется SymbolRef.
Вот что я делаю.
REGISTER_MAP_WITH_PROGRAMSTATE(TrackVar, std::string, RefState)
где мой RefState
struct RefState {
private:
enum Kind { Synchronized, Unsynchronized } K;
RefState(Kind InK) : K(InK) { }
public:
bool isSynchronized() const { return K == Synchronized; }
bool isUnSynchronized() const { return K == Unsynchronized; }
static RefState getSynchronized() { return RefState(Synchronized); }
static RefState getUnsynchronized() { return RefState(Unsynchronized); }
bool operator==(const RefState &X) const {
return K == X.K;
}
void Profile(llvm::FoldingSetNodeID &ID) const {
ID.Add(K);
}
};
Однако я получаю ошибку во время сборки.
llvm/ADT/FoldingSet.h:223:5: error: 'const class std::basic_string<char>' has no member named 'Profile'.
ИтакМне интересно, если строки поддерживаются в качестве ключей?Если нет, я должен использовать обычный std :: map?
Ценю любую помощь.