FIX: Exception Specification in Template causes C2961 ErrorLast reviewed: September 18, 1997Article ID: Q133071 |
The information in this article applies to:
SYMPTOMSWhen you use an exception specification in a class or function template, the following error occurs:
error C2961: syntax error : 'throw' : unexpected token in template declaration RESOLUTIONRemove the exception specification from the function declaration and definition. By design, it is not supported.
STATUSMicrosoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug was corrected in Visual C++ version 5.0.
MORE INFORMATIONThe use of exception specifications is not supported in this version of Microsoft C++. However, you would expect the compiler to generate the following warning instead of an error:
warning C4290: C++ Exception Specification ignoredThis level 4 warning is generated as expected when using an exception specification in a non-templated class or function.
Sample Code to Generate Error C2961 and Demonstrate Problem
/* Compile options needed: (none) */ template <class T> class C1 { public: C1(); void fn() throw(); // C2961 error - to work around, remove "throw()" }; template <class T> void C1<T>::fn() throw() // C2961 error - to work around, remove "throw()" {} Sample Code to Generate Warning C4290 and Demonstrate Resolution
/* Compile options needed: /W4 */ class C2 { public: C2(); void fn() throw(); // compiler correctly generates C4290 warning }; void C2::fn() throw() // compiler correctly generates C4290 warning {} |
Additional query words: 9.0 9.00 9.1 9.10 9.2 9.20
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |