SFINAE 在概念论证中起作用吗? (也许这里不叫SFINAE)。例子:
template <class F>
requires
std::invocable<F, int> && // <-- is this needed?
(!std::same_as<std::invoke_result_t<F, int>, void>)
auto foo(F f, int a) -> int
是上面的std::invocable<F, int>
必需的?
如果我们像这样省略它:
template <class F>
requires (!std::same_as<std::invoke_result_t<F, int>, void>)
auto foo(F f, int a) -> int
这个版本是否格式良好,即使std::invoke_result_t<F, int>
不是(即如果它不可调用)或者是 UB/格式错误,ndr?
foo(11, 24);
// std::invoke_result_t<int, int> does not exist,
// is the second variant the one without `std::invocable<F, int>` ok in this case?
gcc 似乎在没有它的情况下表现:https://godbolt.org/z/SEH94- https://godbolt.org/z/SEH94-