Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All
Expand Minimize

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 (C++ Component Extensions) 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:
© 2015 Microsoft