std::invoke 应该在 C++17中的constexpr lambdas 后加上 constexpr
,这样不是更好吗?
有什么障碍会阻止这样做吗?
更新: P1065 会使它成为 constexpr
。
为了历史原因保留原帖:
根据提案:
尽管实现标准符合的 invoke 函数模板作为 constexpr 函数的可能性存在,但建议并未要求这样的实现。主要原因是让它与现有的标准函数对象保持一致,如 std::mem_fn、std::reference_wrapper 和操作符包装器等都可能具有此定义。此外,强制实施这种要求将会阻止引用 std::mem_fn 的 invoke 实现。
该提案假设通过单独的提案对头文件添加 constexpr 功能进行一致性应用。
在“可实现性”部分中介绍了 constexpr 和基于标准库的两种实现方式。
相关 CWG 问题 #1581:何时定义 constexpr
成员函数?。