2016-11-30 6 views
0

У меня есть этот код:лязг :: ast_type_traits :: DynTypedNode :: получить() косяк шаблон Infer аргумент «T»

ASTContext::DynTypedNodeList NodeList = ASTC->getParents(*DRE); 
ast_type_traits::DynTypedNode ParentNode = NodeList[0]; 
/*some code here to determine if the NodeKind is ImplicitCastExpr*/ 
const ImplicitCastExpr* ParentICE = ParentNode.get(); 

в основном, его получение родителя матч-узла, а затем, если его a ImplicitCastExpr(), я хочу получить узел как один и выполнить еще проверок. , когда я пытаюсь скомпилировать код, для DynTypedNode::get(), я получаю это:

mutator-lvl0.cpp:1644:30: error: no matching member function for call to 'get' 
     ParentICE = ParentNode.get(); 
        ~~~~~~~~~~~^~~ 
/home/bloodstalker/llvm/llvm/llvm/tools/clang/include/clang/AST/ASTTypeTraits.h:233:12: 
note: candidate template ignored: couldn't infer template argument 'T' 
    const T *get() const { 

вот объявление из заголовка:

template <typename T> 
const T *get() const { 
    return BaseConverter<T>::get(NodeKind, Storage.buffer); 
} 

, что я делаю неправильно?

ответ

3

Параметр шаблона T здесь:

template <typename T> 
const T *get() const { ... } 

является , не выводится контекст. Он не может быть выведен из аргументов вызова функции. Вы пытаетесь вызвать эту функцию, не предоставляя тип для T, поэтому ошибка.

Вам нужно будет написать:

const ImplicitCastExpr* ParentICE = ParentNode.get<ImplicitCastExpr>(); 
               // ^^^^^^^^^^^^^^^^^^