Я думаю, что слишком много думал для использования "const" в элементе данных def.Я был обеспокоен тем, что строка «123» может быть недоступна во время разбора.Оказывается, это доступно, и доступ довольно прост.Предположим, что «d» указывает на член определения «str» выше, фрагмент функции для возврата инициализированной строки может выглядеть следующим образом:
...
if ( VarDecl *vard = dyn_cast<VarDecl>(d) ) {
if ( vard->isStaticDataMember() ) {
Expr *expr = vard->getInit();
Expr *constExpr = expr->IgnoreImpCasts();
if ( StringLiteral *str = dyn_cast<StringLiteral>(constExpr) )
return str->getString().str();
}
}