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