FIX: Exception Specification in Template causes C2961 Error

ID: Q133071


The information in this article applies to:
  • Microsoft C/C++ Compiler (CL.EXE), included with:
    • Microsoft Visual C++ 32-bit Edition, versions 2.0, 2.1, 2.2, 4.0, 4.1


SYMPTOMS

When 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


RESOLUTION

Remove the exception specification from the function declaration and definition. By design, it is not supported.


STATUS

Microsoft 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 INFORMATION

The 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 ignored
This 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

Keywords : kbcode kberrmsg kbtool kbLangCPP kbVC kbVC500fix
Version : :2.0,2.1,2.2,4.0,4.1
Platform : NT WINDOWS
Issue type : kbbug


Last Reviewed: January 31, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.