我们已经完成了VS 2015 RTM的constexpr实现,并且更新了在线编译器 webcompiler.cloudapp.net 我们最新的开发版本。 像我一样 前面提到的 编译器目前支持C++ 11的CONTXPR的原始规则。 C++ 14扩展的COSTEXPR将在未来实现,但不在2015 RTM中实现。 在STL中,我们实现了当前C++ 17工作文件中的每一次出现的COSTEXPR。 编号4527 ,只有极少数例外:
- MIN()/Max()/Mimax():初始化编译器列表(需要编译器支持C++ 14扩展CONSTEPRPR)
- 最小元素()/最大元素()/最小最大元素()(原因相同)
- 数字u限制
::quiet u NaN()/signaling u NaN()(据我所知,这需要编译器的魔力) - mutex的默认构造函数(在我们可以放弃对XP目标的支持之后,需要对其进行彻底的检查)
- erroru category的默认构造函数(在以前的修复中,我使用了reinterpretu cast,这与constexpr不兼容;我可以很容易地改变这一点,但不是在RC和RTM之间)
我所说的“实现”是指我有一个测试用例,它在STL中执行constexpr的每一次出现,编译器不需要任何解决方法就可以接受它。 所有棘手的东西都能工作,比如位集的unsigned long long构造函数和元组的转换move构造函数。 当然,仍然有一些bug潜伏着,特别是考虑到这个特性的重要性。 因此,我们邀请您试用在线编译器,并报告您发现的任何问题。 (报告他们 很快 ,比如本周。) 我不知道STL中有任何constexpr错误,但仍有一些编译器错误需要修复——特别是DevDiv#1134662“constexpr构造函数正在发射动态初始值设定项”和1165072“constexpr ICE with brake elision”。 微软连接 是报告bug的官方场所,但我们将接受VCBlog评论中的constexpr bug报告。 最后,感谢:这是由Tanveer Gani在编译器中的巨大工作和Dave Bartolomeo贡献的/analyze修复实现的。 STL是由punkumware的P.J.Plauger和我自己构建的,Alex Voicu贡献了