问题标签 [if-constexpr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如果 constexpr gcc 错误
我注意到我的代码库不再使用 gcc 编译。
我能够将问题减少到以下问题
clang 和 msvc 正在编译代码没有问题。
更改true
toif constexpr
和false
gcc 将编译它。
我假设 gcc 没有完全解析导致奇怪错误的错误部分。
所以我的问题:
- 代码是有效的 c++ 还是我错过了什么?
- 我应该针对 gcc 提交错误吗?(我无法找到有关此问题的错误报告)
c++ - if constexpr 内部的 requires 子句有问题
在尝试if constexpr
基于if constexpr 和 requires-expression 实现临时概念检查时,面临以下问题:requires clause
有什么问题if constexpr
requires clause
?
c++ - 如果 constexpr 在将值作为参数传递时失败,而不是在作为模板传递时失败
我有一些看起来像这样的代码
我期待能够if constexpr
在 takeparam 函数中使用,但我无法让它工作。我究竟做错了什么?
visual-studio - c++17 语言扩展和 std:c++17 标志
我对 Visual Studio 2017(版本 15.9.11)中的不同错误感到困惑:
和
我知道添加 /std:c++17 标志可以解决这些问题,但为什么会有两条不同的消息?语言扩展和编译器标志要求有什么区别?
我对这件事更感兴趣,因为我正在使用 Unreal Engine 4.24 编写游戏,我可以使用“if constexpr”,但即使使用相同的编译器,我也不能使用“结构化绑定”。
为什么?
c++ - 如果 constexpr 格式正确,这是在内部使用 static_assert 吗?
昨天我读了几个答案static_assert(false, "Some message")
,关于 an 的内部else
子句的使用if constexpr
。我知道根据标准,它被认为是格式错误的(即使某些编译器,包括 MSVC2017 会接受它)。Qt 也会将此标记为错误。
我的问题是,下面的代码是否符合标准?(我倾向于这样认为,但我想确认一下。)
编辑:
从我得到的评论看来,bool_value应该像这样定义:
使用模式
然后它是格式良好的,只是因为bool_value可以专门化为一个为表达式返回truebool_value<false, TypeOfValue>::value
的版本。
c++ - 在非 constexpr 函数中作为左值传递的变量上使用“constexpr”函数
我std::array
用作表示在编译时具有固定长度的向量的基础,并希望std::array::size
用作一个函数来禁用和向量constexpr
的叉积计算。1D
2D
当我std::array::size
在非 constexpr 函数中使用时,它将我的向量作为左值参数,我得到一个错误:
这是该main
函数的最小工作示例:
我发现这个问题提到了 GCC 8.0 中的一个错误,但我使用的是g++ (GCC) 10.1.0
.
引用答案
表达式 e 是核心常量表达式,除非按照抽象机 (6.8.1) 的规则对 e 的求值将求值以下表达式之一:
... 一个 id 表达式,它引用引用类型的变量或数据成员,除非该引用具有前面的初始化,并且它是用常量表达式初始化的,或者它的生命周期在 e 的计算中开始
这是否意味着,在人类(非标准)语言中,在我的表达式e:=cross(p1,p2)
中,p1
并且p2
在as 之前没有初始化,constexpr
并且它们的生命周期不是以 开头e
,所以即使p1
andp2
是在编译时知道其大小的数据类型的对象 nad谁的 mfunctionsize
是constexpr
mfunction,我现在必须将它们声明为 constexpr,然后才能将它们绑定为不是的函数中的左值constexpr
?
c++ - 为什么“if constexpr”的错误分支会被编译?
为什么这段代码在编译时会出错?我对“”的了解(以及这个)if constexpr
表明该else
块不应该被编译。
错误是:
使用的编译器:g++ 版本 7.5.0
编译时我使用了-std=c++17
标志。
PS缺少的';' 是故意的,只是为了检查是否else
正在编译。
c++ - C++ constexpr if 语句的灵活性
我经常遇到这样的情况:
但是当A
是时constexpr
,没有办法向 if 语句表明 if B
is not also constexpr
。此外,启用使用的解决方法constexpr
是丑陋的:
是否有使constexpr if
陈述更灵活的建议,即。考虑哪些条件是constexpr
?如果没有,除了假设编译器会做正确的事情(他们并不总是这样做)之外,是否有解决这种情况的方法。
c++ - 如果评估,为什么 constexpr 中的代码无法访问?
我曾期望编译器允许在涉及 constexpr 的不可访问代码中出现无效或错误语句,如果:
任何解释/解决方法都会有所帮助