Professional Documents
Culture Documents
Limitations of VC++
Limitations of VC++
Static Analysis
Compiling using /analyze is not supported. Doing so will likely result in internal
compiler errors.
Debugging
The debuggers behavior might be surprising or erroneous when encountering code
that uses new features in this release.
Await
This feature utilizes mechanisms provided by the underlying operating system. It
can only be used on machines running Windows 8.1 or later.
Noexcept
In this release the implementation of noexcept does not call std::terminate when an
exception crosses a noexcept function boundary. Instead, the search continues up
the call stack until a handler is found or it reaches the outermost function.
Behavior Changes
The following is a list of behavior changes with respect to Visual C++ Compiler 2013
RTM.
Impact:
High.
Mitigation:
Avoid destructors that throw exceptions.
Previous versions of Visual C++ would define special member functions even
if the definition would be ill-formed. For example, in the case that an implicit
definition would have to call an inaccessible base member function. The
previous compiler diagnosed the use of such implicit functions accordingly.
The current compiler will mark such special member function as deleted
instead, as required by the C++ standard. This leads to better diagnostics but
it may also indirectly impact code that violates other rules related to deleted
functions. For example, a private virtual destructor will result in a deleted
destructor in a derived class; if the base destructor is not deleted then it may
trigger C2282: deleted function cannot override a non-deleted virtual
function. Example:
class B {
private:
B() {}
};
class D : public B {
};
D obj;
If any move operation (move constructor or assignment operator) is userdeclared, then the implicit copy constructor and assignment operator will be
defined as deleted, effectively making the type move-only. Attempting to
copy instances of such types will trigger C2280: attempting to reference a
deleted function. Example:
struct A {
A();
A(A&&);
};
A g;
A foo(A a)
{
g = a;
return g;
}
Impact:
Medium.
Mitigation:
To restore the copy operations, the copy constructor and assignment operator can
be explicitly defaulted.
Impact:
Low.
Mitigation:
Always provide the correct number of arguments to printf and other functions in its
family.