您可能应该首先决定您绝对希望能够使用哪个 C++11,然后在您想要支持的平台上查找支持此功能的最低编译器版本。Apache 对支持各种 C++11 特性的每个主要编译器(gcc、clang、visual c++、intel 等)的最早版本进行了很好的调查。
根据我的经验,gcc 4.7 和 Clang 3.2 的功能几乎是完整的(除了继承构造函数之类的东西,它们很有用,但不能改变游戏规则)。您可以使用 gcc 4.6(但使用 4.6.3 版本以避免许多错误)或 Clang 3.1 获得许多有用的功能,这很好,因为 gcc 4.6 也是官方的 Android NDK 编译器(如果您希望支持它) .
如果您希望支持 Linux,您可以查看DistroWatch,您可以在其中查看为每个发行版安装了哪些 gcc 版本。例如,许多基于Ubuntu的流行发行版已经在 gcc 4.7 上运行了将近一年,并且将在下一个版本中升级到 gcc 4.8.1(功能完整)。
在 Windows 上,有Nuwen Distro当前运行 MinGW 4.8.1(只有 32 位,没有线程)。Visual C++ 不能胜任这项工作,需要一段时间(一年或更长时间?)才能了解 gcc 4.8 和 Clang 3.3 的位置。
即使发行版不正式支持最新版本,也有提供尖端技术的私有包存储库(通常由同一人维护,同时也进行官方打包)。LLVM 项目甚至提供了预构建的夜间 SVN 快照,这些快照支持许多C++14 功能(在-std=c++1y
模式下)。对于 gcc,没有夜间包 AFAIK。
关于强制开发人员升级编译器/发行版。我认为这没什么大不了的(但@ArneMertz 关于首先咨询他们的观点在这里非常好)。虚拟机安装起来很容易(端到端约 45 分钟),所以如果你只想发布一个仅二进制的产品,那就继续吧。对于用户而言,这是另一回事,因此,如果您提供所有普通用户都需要编译的仅标头模板库,那应该会让您在转换速度上更加保守。