給出一個函數模板,如:Clang AST Matchers:如何找到調用rvalues調用的完美轉發函數的調用?
template <typename T> void function(T &&t) { /*...*/ }
如何找到給通過右值的函數調用:
function(1); // MATCH
int i;
function(i); // SKIP
int foo();
function(foo()); // MATCH
...
你的想法。
我在想是這樣的:
callExpr(callee(functionDecl(
hasName("function"),
unless(hasTemplateArgument(0,
refersToType(references(anything()))))))
過濾掉其中T
推導爲引用類型(指示左值傳遞)的情況下,但我不知道怎樣才能連接Matcher<FunctionDecl>
預計由functionDecl
到Matcher<TemplateSpecializationType>
從hasTemplateArgument
返回。
我使用的是Clang 3.8,萬一它很重要(online docs似乎在5.0.0,http://releases.llvm.org/3.8.0/tools/clang/docs/LibASTMatchersReference.html給出了404)。
謝謝。即使在沒有第二個「g」超載的情況下,這也是有效的。 –