Visual C++對於C++標準的支持不是很完善好像是欽定了的。MS還特地在這裏說了些非標準行爲[1]以及擴展行爲[2]。這就不可避免地會讓處女座程序猿感到難受(我不是處女座)。因此,通過一番google/bing以後,你會找到一個很好的VC++編譯選項/Za。windows
咱們先來看看/Za選項是什麼意思:app
The /Za compiler option emits an error for language constructs that are not compatible with ANSI C89 or ISO C++11.ide
We recommend that you disable language extensions by specifying the /Za option if you plan to port your program to other environments. When /Za is specified, the compiler treats Microsoft extended keywords as simple identifiers, disables the other Microsoft extensions, and automatically defines the
__STDC__
predefined macro for C programs.ui
說得和真的同樣,讓人很是激動,一顆賽艇。google
固然了,事實並不是你想得那麼完美[手動滑稽.gif]。code
你include <windows.h>試一下[蜜汁微笑.avi]。orm
你要還不死心,看這裏。ci
When I encountered that bug (valid code like vector<unique_ptr> triggers compiler errors under /Za; the problem is that /Za performs an elided-copy-constructor accessibility check during move construction when no copy constructor is being called even theoretically), I asked for a fix, but unfortunately the resolution was "won't fix forever". I can confirm that it will not be fixed in VC10 SP1 RTW, and that there are currently no plans to fix it in VC11.rem
As a result, during VC10's development we stopped testing our C++ Standard Library implementation under /Za, and I no longer consider it to be a supported switch. (We support almost all switches, including the headache-inducing ones like /Gr and /Gz, but we have to draw the line when valid code is broken.)get
I also asked for /Za to be removed from VC11, but that won't happen either. (However, I was told that /Wp64, which was deprecated in VC9 and VC10, will be removed from VC11. I don't think that's happened yet so I'll have to ping a compiler dev about it. /Wp64 has always been broken - it suffers from false positives and false negatives and interacts extremely badly with templates - and it has been completely superseded by the existence of x64-targeting compilers.)
補充說明:
【2017/8/10】正確的姿式應該是使用/Zc。
---完
[1] Visual C++ 非標行爲:https://docs.microsoft.com/en-us/cpp/cpp/nonstandard-behavior
[2] Visual C++擴展行爲:https://docs.microsoft.com/en-us/cpp/build/reference/microsoft-extensions-to-c-and-cpp