簡體   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