问题标签 [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++ - 可能的模板和常量表达式——如果不兼容
我想e
在编译时计算值(别担心,不是功课),但是出了点问题。
虽然计算的值是正确的,但编译器会抛出关于模板溢出的错误。看起来limit
变量超出了范围(下图0
),但它不应该发生,因为语句0
正在处理 –case if constexpr(…)
。
所以问题是,我错了,这种行为应该是预期的,还是编译器错误?使用 GCC 7.1.0 编译。
c++ - `if constexpr` 可以用来声明不同类型的变量和 init-expr
例如:
这在 D lang 中很常见,但我没有找到有关 C++17 的信息。
当然,可以使用类似的东西
但仅限于基本情况。即使是不同的初始化器(如上)也会产生大问题。
c++ - 您自己的类型的结构化绑定不是结构或元组(通过公共成员函数)
我正在通过 Herb Sutter's
旅程:迈向更强大、更简单的 C++ 编程
结构绑定部分
为了理解这个概念。最好是写一个我试过但得到一些错误的程序
只是想尝试如何在具有私有数据的类上使用结构绑定。请忽略以下示例。如果您可以提供任何示例
错误
if constexpr(I == 0) return x._ival;//'_ival' 是 'foobar' 的私有成员
else if constexpr(I == 1) return xs;//'s' 是 'foobar' 的私有成员
auto [ n, s] = f( 1024,"hello" );//不能分解非公开
需要帮助
1.如果有人可以详细说明他在这些方面实际尝试做什么(请参阅提供的链接)
2.任何建议如何解决上述示例的错误
c++ - 当我遇到错误的 constexpr if 分支时停止 Visual Studio 17 编译
如果不应该命中 constexpr if 分支,有什么方法可以强制编译器失败?
下面的这段代码比我能解释得更好:
c++ - if constexpr 而不是标签调度
我想使用if constexpr
而不是标签调度,但我不确定如何使用它。下面的示例代码。
c++ - 为什么 if constexpr 不会使这个核心常量表达式错误消失?
在参考这个问题。用于初始化constexpr
变量的核心常量表达式y
格式不正确。这么多是给定的。
但是,如果我尝试将其if
变成if constexpr
:
错误仍然存在。GCC 7.2 仍然提供:
但我认为语义检查应该留在废弃的分支上。
但是,通过 lambda 进行间接constexpr
处理确实有帮助:
on说明constexpr
符y
似乎改变了检查丢弃分支的方式。这是预期的行为吗?
@max66很友好地检查了其他实现。他报告说,GCC (7.2.0 / Head 8.0.0) 和 Clang (5.0.0 / Head 6.0.0) 都可以重现该错误。
c++ - “if constexpr”与“try in constexpr function”警告的交互
我声称这个程序应该是格式良好的:它声明了一个 constexpr 的成员函数S<int>
。然而,GCC 和 Clang 都拒绝这个程序。
海湾合作委员会 说:
错误:“constexpr”函数中的“try”
铿锵声 说:
错误:constexpr 函数中不允许的语句
他们似乎都没有注意到“try”语句位于语句的废弃分支中if constexpr
。
如果我将try
/ catch
out 分解为非 constexpr成员函数void trycatch()
,那么 Clang 和 GCC 都会再次对代码感到满意,即使它的行为应该等同于不满意的版本。
这是
- GCC 和 Clang 中的错误?
- GCC 和 Clang 忠实执行的标准中的缺陷?
- 由于“有条件的 constexprness”而导致的实施质量问题
foo()
?
(不相关的背景:我正在any::emplace<T>()
为一个分配器感知版本实现 constexpr,any
其分配器可能是 constexpr-per- P0639(即它可能缺少deallocate
成员函数)或可能不是。在前一种情况下,我们不想要或不需要try
; 在后一种情况下,如果throws的构造函数我们需要try
调用。)deallocate
T
c++ - if constexpr 在模板化 lambda 中未丢弃的错误分支
我对模板化 lambda 中的“if constexpr”有疑问。为了争论,让我们忽略我是如何到达那里的,但是我有一个以某种方式定义的 struct foo 导致如下所示:
现在我可以定义一个模板函数 thtemplate
foo
如果 constexpr 参数 to 与 to相同,则实例化此函数并使用它将编译print_fun
,即
这确实可以编译,因为错误分支在模板化实体中被丢弃,因此在 print_fun 中使用 obj.b 没有问题。
但是,如果我定义一个类似的 lambda 表达式如下:
并实例化它:
然后不丢弃错误分支,编译器给我
'b': 不是 'foo' 的成员
这是预期的行为,是否发生在其他编译器上?难道我做错了什么?或者它是编译器中的错误?(Microsoft Visual Studio 版本 15.4.1,gcc 7.2)
用 gcc 在这里查看我的测试,它也没有为仿函数或函数编译。
编辑:这是我的最小示例的代码,我不知道外部链接不够用。这可在 Visual Studio 15.4.1 上编译,但注明的行除外。
foo_bar
代替了foo
我的描述。
c++ - if constexpr 可能的 VC++17 编译器错误?
在使用 Visual C++ 中的一些新 C++17 功能时,我遇到了一个对我来说似乎是错误的问题。在使用编译器资源管理器在其他编译器下编译时,代码似乎按预期生成。产生的错误:
使用 Visual Studio 2017 15.3.5