繁体   English   中英

clang++ 和 g++ 之间的不同行为(使用 c++17)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM