簡體   English   中英

std :: is_invocable為false,但std :: invoke有效

[英]std::is_invocable is false but std::invoke works

以下程序的輸出似乎與之矛盾:

#include <type_traits>
#include <iostream>
#include <functional>

void foo(int&){ std::cout << "called\n"; }

int main() {
    int a;
    foo(a);
    std::cout << std::is_invocable_v<decltype(foo), decltype(a)> << std::endl;
    std::invoke(foo, a);
}

輸出為:

called
0
called

在我看來,哪個調用了無法調用的功能? 這里發生了什么?

decltype(a)int 這對應於使用具有int prvalue的 f調用-類似於f(7) 那個確實不能編譯,因為非const左值引用不能綁定到prvalue。

相反,您正在main是使用一個lvaluea調用f ,引用可以很好地綁定到該

要從std::is_invocable獲得正確的結果,請通過添加括號使用decltype的表達式形式:

std::is_invocable_v<decltype(foo), decltype((a))>
//                                          ^ ^

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM