[英]Different behavior between clang++ and g++ (using c++17)
我试图使用一些现代 c++ 黑暗魔法,以测试 class 是否有一个名为 funcA 的成员 function。
而且……事与愿违……
它使用“g++ -std=c++17 main.cpp”完美运行。
但是,当我使用“clang++ -std=c++17 main.cpp”编译相同的代码时,即使 class 具有此功能,它也会返回 false!
你能建议如何解决这个问题吗? 假设我必须使用 clang++。
#include <iostream>
#include <type_traits>
template <typename, typename, typename = void>
struct HasFuncA : std::false_type {};
template <typename T, typename S>
struct HasFuncA<T, S, std::void_t<decltype(std::declval<T>().template funcA(std::declval<S>()))>> : std::true_type {};
class MyClass
{
public:
void funcA(int) const{}
};
int main(){
std::cout<<HasFuncA<MyClass, int>()<<std::endl;
return 0;
}
@Igor Tandetnik 的回答解决了这个问题。
我从这一行中删除了单词模板
struct HasFuncA<T, S, std::void_t<decltype(std::declval<T>().template funcA(std::declval<S>()))>> : std::true_type {};
==>
struct HasFuncA<T, S, std::void_t<decltype(std::declval<T>(). funcA(std::declval<S>()))>> : std::true_type {};
它奏效了!
仍然不知道到底发生了什么..但这现在正在工作!
谢谢伊戈尔!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.