VS2015 Update 3 RC版本中编译器的改进

[原文发表地址] Compiler improvements in VS 2015 Update 3 RC

[原文发表时间] 2016/6/7

C++编译器团队希望大家感受VS 2015 UPdate3编译器中的各种酷炫。 相比第一个发售版本VS 2015 RTM, 这一版的编译器在兼容C++标准准则上已经取得了重要的进展。 Update 3版本针对以下特性进行了特性增强。 表达式SFINAE(匹配失败不是错误), nested namespaces(嵌套命名空间),generalized range-based for loops(泛型范围循环)。 最后,我们使用了新的编译开关来帮助你针对代码所依赖的C++ ISO标准进行切换。

   于此同时, 我们也修复了近200个来自update2 版本中的编译器bug, 当中有许多Bug出自Connect。感谢你们的反馈。 当编译器源代码改变后,编译器将会提供定义明确的诊断信息,我们也会持续文档化每一个修复,并把修复带来的影响记录到这个页面:

compiler conformance improvements documentation for VS 2015。  是的, 我们会积极修改bug,即使需要修改源代码.

    让我们深入这些新特性吧. 这些修改大部分都是帮助我们的编译器更加兼容已经存在的C++11和C++14标准特性。有些修改甚至更具有意义,这些修改或许就是下一个C++标准特性.

·         Standards versioning: 在Visual studio C++ 2015 up3中, 我们引入了一些方法,它可以帮助你选择代码所需要的相关IOS C++语言标准,从而改进你的项目。 我们创建了一系列可以切换相应C++标准的编译选项, 例如/std:c++14, /std:c++latest。 关于这些编译选项, 下面这边文章可供你阅读Standards version switches in the compiler

·         Expression SFINAE: 通过我们的努力, 表达式匹配失败不是错误特性得到了提高, 因此一些使用此特性的受欢迎的库,例如Boost和Range-V3 也得到了提高。 请阅读下面这篇发布的文章, 它会告诉你有关完善提高这个特性的详细内容。Expression SFINAE improvements in VS 2015 Update 3

·         Nested namespaces: 下一个版本的C++标准包含更简明的方法来声明嵌套命名空间。之前我们这样写:

namespace A {

        namespace B {

            namespace C {

            ...

            } 

        }

    }

Update3中我们可以简写为:

namespace A::B::C {

    ...

}

Visual C++在UP3中支持这种更简明的语法。 这个特性有希望出现在下一个C++标准,但我们已经在UPDATE 3中通过/std:c++latest选项(详见上述标准版本),就可以实现。 关于这个特性的相关C++标准提议,请参照Nested namespace definition

·         Generalized range-base for loops: 泛型范围循环特性不再需要<begin>, <end>迭代器具有相同的类型。 同样这个特性也有希望出现在下一个C++标准。 UPDATE 3通过 std:c++latest开关(详见上述标准版本)也已经实现了这个特性。

关于这条提议,参照: Generalizing the Range-Based For Loop

结语 :

我们渴望任何使用过程中的反馈, 请通过邮件

visualcpp@microsoft.com 或者User Voice, Suggestions, Connect (反馈bug) 这些常见的途径提供给我们, 甚至通过Send-A-Smile.  我们非常希望收到你的反馈!

2016/6/8 最新更新: 有一些人一直在问新优化器是否会出现在Update3中。 是的,它已是VS 2015 Update 3的一部分。