Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何检查泛型lambda是否可以使用特定的输入参数类型调用?_C++_C++14_Template Meta Programming - Fatal编程技术网

C++ 如何检查泛型lambda是否可以使用特定的输入参数类型调用?

C++ 如何检查泛型lambda是否可以使用特定的输入参数类型调用?,c++,c++14,template-meta-programming,C++,C++14,Template Meta Programming,有没有检查泛型lambda是否可以用特定类型调用 #include <iostream> #include <type_traits> struct A { void DoAStuff() {} }; struct B { void DoBStuff() {} }; int main() { auto fn = [](auto& arg) { arg.DoAStuff(); }; std::cout << std::boolalp

有没有检查泛型lambda是否可以用特定类型调用

#include <iostream>
#include <type_traits>

struct A { void DoAStuff() {} };
struct B { void DoBStuff() {} };

int main() {
    auto fn = [](auto& arg) { arg.DoAStuff(); };

    std::cout << std::boolalpha << std::is_invocable<decltype(fn), A&>::value << std::endl;
    std::cout << std::boolalpha << std::is_invocable<decltype(fn), B&>::value << std::endl;
}
#包括
#包括
结构A{void DoAStuff(){};
结构B{void DoBStuff(){};
int main(){
auto fn=[](auto&arg){arg.DoAStuff();};

std::cout“此代码不可编译”你得到了什么编译错误?除了
是可调用的
不是C++14的一部分之外…@Nicolas更新了这个问题,我有我的版本是可在C++14中调用的。当你使用
B
时,你期望它做什么?我希望答案为FALSE,这样我就可以在SFINAE类型的概念中使用它。这是不可能的。错误来自lambda的定义内部。SFINAE将仅对函数签名起作用。您需要明确SFINAE对
doAStuff
的可用性。