gpt4 book ai didi

c++ - 当我遇到错误的 constexpr if branch 时停止 visual studio 17 编译

转载 作者:行者123 更新时间:2023-11-27 23:51:29 28 4
gpt4 key购买 nike

如果一个 constexpr if branch 不应该被击中,有没有什么方法可以强制编译器失败?

下面的这段代码比我能更好地解释了这一切:

template<unsigned int number_base>
class arithmetic_type
{
if constexpr(number_base == 0 || number_base == 1)
{
//hey, compiler! fail this compilation please
}
else
{
//go on with class implementation
}

}

最佳答案

你想要static_assert() .在这种情况下,您可以删除 if constexpr 并直接断言:

template<unsigned int number_base>
class arithmetic_type
{
static_assert(number_base != 0 && number_base != 1); // or >= 2, since unsigned
//go on with class implementation
};

但一般来说,可能有些地方只需要 static_assert(false)。但这是错误的,该断言总是会触发,因为它是一个非依赖条件。在这种情况下,您需要提供一些看起来依赖但实际上不是的东西:

// always false, but could hypothetically be specialized to be true, but 
// nobody should ever do this
template <class T> struct always_false : std::false_type { };

static_assert(always_false<SomeDependentType>::value);

关于c++ - 当我遇到错误的 constexpr if branch 时停止 visual studio 17 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46040006/

28 4 0
文章推荐: java - 获取所选元素内的所有元素作为元素 Jsoup android 的数组
文章推荐: javascript - Google Chrome XHR 预览选项卡背景变灰
文章推荐: javascript - 访问
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com