簡體   English   中英

std :: tie上的std :: invoke_result

[英]std::invoke_result on std::tie

我在C ++ 17中使用GCC 7.3,但我不明白為什么此行失敗:

template <typename... Args>
using X = std::invoke_result<std::tie, Args...>::type;

錯誤是:

error: type/value mismatch at argument 1 in template 
parameter list for ‘template<class _Functor, class ... _ArgTypes> 
struct std::invoke_result’
using X = std::invoke_result<std::tie, Args...>::type;
note:   expected a type, got ‘std::tie’

都是在錯誤消息中:

注意:需要一個類型,得到了'std :: tie'

invoke_result是一個帶有一堆類型的元函數。 std::tie()函數模板 -它不是類型。 而且它甚至都不是對象,因此您也無法執行invoke_result<decltype(std::tie), Args...>

invoke_result為您提供的是一種適用於所有可調用對象的語法。 但是您不需要使用std::tie它是一個函數模板,因此您可以在未評估的上下文中直接調用它:

template <typename... Args>
using X = decltype(std::tie(std::declval<Args>()...));

注意:除非您真的特別需要元函數本身,否則始終使用_t別名。 也就是說, std::invoke_result_t<...>而不是std::invoke_result<...>::type 無論如何,后者是錯誤的,因為您缺少typename關鍵字-並且別名消除了這種需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM