给定函数类型void()
, void(int)
, 等等...,我们static_assert()
可以Args&&... args
与函数类型兼容吗?
template <typename F = void(), typename... Args>
auto call(Args&&... args)
{
// TODO: check if F is compatible with Args
if constexpr (std::is_same_v<void, decltype(func(args...))>)
func(std::forward<Args>(args)...);
else
return func(std::forward<Args>(args)...);
}
使用decltype(func(args...))
会报错,但这不是最好的错误。此外,是否有可能static_assert()
通过从编译器输出中隐藏这两种类型来使情况变得更糟?