[英]Can I use the result of a C++17 captureless lambda constexpr conversion operator as a function pointer template non-type argument?
在回答時如何編寫看起來像方法的lambda表達式? 我試圖通過利用這樣一個事實將無捕獲的lambda變成一個成員函數指針,因為C ++ 17,無捕獲的lambdas有一個constexpr轉換操作符到它們的函數指針類型。
所以我提出了一個問題:
template<void(*)()> struct A{};
int main()
{
A<static_cast<void(*)()>([]{})>{}; // 1
constexpr auto fp = static_cast<void(*)()>([]{});
A<fp>{}; // 2
}
現在,這在clang(從5.0.0開始)編譯,但gcc(> = 7.2)抱怨:
error: lambda-expression in template-argument
A<static_cast<void(*)()>([]{ /*whatever*/ })>{}; // 1
^
error: 'main()::<lambda()>::_FUN' is not a valid template argument for type 'void (*)()' because 'static constexpr void main()::<lambda()>::_FUN()' has no linkage
A<fp>{}; // 2
問題是, 誰是對的?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.