lig*_*ulb 5 c++ templates c++17
std::conjunction在对我有关不短路(连接模板不短路)的问题的评论中,有人建议我std::is_invocable_r作为解决我的问题的方法。然而,当我尝试使用它时,我发现了一些非常奇怪的行为。例如,此代码使两个断言均失败:
#include <type_traits>
int main()
{
static_assert(!std::is_invocable_r_v<void, int(int), int>);
static_assert(std::is_convertible_v<int,void>);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
is_invocable_r请注意cppreference的描述:
确定是否
Fn可以使用参数调用ArgTypes...以产生可转换为 的结果R。
显然int不可转换为void,第二个断言证实了这一点。问题是为什么会std::is_invocable_r_v<void, int(int), int>产生一个true值。这是一个实例: https: //godbolt.org/z/HywH7D
请注意,可以std::is_void_v<std::invoke_result_t<int(int),int>>在此处获取正确答案(https://godbolt.org/z/YMvc47),但这不是我的问题。(它并不能解决我的连词问题)。
| 归档时间: |
|
| 查看次数: |
472 次 |
| 最近记录: |