【发布时间】:2018-12-12 05:34:14
【问题描述】:
我正在尝试检查参数包中的每个参数是否可以存储在 8 个字节内(sizeof
我有函数签名:
template <typename Return, typename... Arguments>
inline auto invoke(std::uint64_t hash, Arguments... arguments) -> Return
使用折叠表达式,我试过了:
static_assert((sizeof(arguments) <= 8 && ...));
使用unexpected token '...', expected 'expression' 编译失败 - 我认为它无效或不正确?
使用 C++20 的概念和约束,我假设类似的东西是可能的?
template <typename Return, typename... Arguments> requires (sizeof(arguments) <= 8 || ...)
inline auto invoke(std::uint64_t hash, Arguments... arguments) -> Return
我假设有一种方法可以使用标准库来检查一个类型是否适合 std::uint64_t 说呢?
【问题讨论】:
-
你忘记了一对额外的
():static_assert(((sizeof(arguments) <= 8) && ...));。我们应该作为一个错字关闭吗? -
看来你是对的@HolyBlackCat - 虽然理想情况下我很想知道实现这一点的最佳方法,比如使用 C++20 概念或其他东西?
-
你应该编辑问题以澄清。