Compiler Error C2715
Visual Studio 2015
The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.
The latest version of this topic can be found at Compiler Error C2715.
type' : cannot throw or catch this type
Value types are not valid arguments when using exception handling in managed code (see Exception Handling for more information).
// C2715a.cpp
// compile with: /clr
using namespace System;
value struct V {
int i;
};
void f1() {
V v;
v.i = 10;
throw v; // C2715
// try the following line instead
// throw ((V^)v);
}
int main() {
try {
f1();
}
catch(V v) { if ( v.i == 10 ) { // C2715
// try the following line instead
// catch(V^ pv) { if ( pv->i == 10 ) {
Console::WriteLine("caught 10 - looks OK");
}
else {
Console::WriteLine("catch looks bad");
}
}
catch(...) {
Console::WriteLine("catch looks REALLY bad");
}
}
__value types or __gc pointers are not valid arguments when using exception handling in Managed Extensions for C++. To resolve this error, use the __box keyword to box the argument.
The following sample generates C2715:
// C2715b.cpp
// compile with: /clr:oldSyntax
using namespace System;
__value struct V {
int i;
};
void f1() {
V v;
v.i = 10;
throw v; // C2715
// try the following line instead
// throw __box(v);
}
int main() {
try {
f1();
}
catch(V v) { if ( v.i == 10 ) { // C2715
// try the following line instead
// catch(__box V *pv) { if ( pv->i == 10 ) {
Console::WriteLine(S"caught 10 - looks OK");
}
else {
Console::WriteLine(S"catch looks bad");
}
}
catch(...) {
Console::WriteLine(S"catch looks REALLY bad");
}
}
Show: