提问者:小点点

如何使consteval函数失败?


我有以下功能:

template <size_t TSize>
consteval size_t indexOf(SomeEnum someEnum,
                         const std::array<SomeEnum, TSize> &arr) {
  for (size_t i = 0; i < TSize; ++i) {
    if (arr[i] == someEnum) {
      return i;
    }
  }
  // How to fail here?
  return SOME_DEFAULT_WRONG_VALUE;
}

函数应该失败,而不是返回默认值,但我不能抛出异常或调用assert。我可以在对函数的每次调用中添加static_assert(如果使用宏,就不那么可怕了),但我更喜欢在函数中工作的解决方案。在这样的场景中有没有方法触发编译失败?


共1个答案

匿名用户

您应该避免使用索引,而是使用std::find,即现在的constexpr。但是,如果不能这样做,那么只需返回tsize;它应该像结束迭代器一样工作。