C++ , function pointer exception error

qqqqq

I get "error: exception specifications are not allowed beyond a single level of indirection" with the following code. Please point me to the part of standard that says that it is not allowed. I want to be sure that it is really required by the language or just compiler specific error. If it is from language specification, what motivates this rule? I am using clang 3.8.0.

  int main()
    {
        void (**fp)() throw() ;
    }
R Sahu

You said:

Please point me to a reference book /spec that says that it is not allowed. I want to be sure that it is really required by the language or just compiler specific error.

With

void (**fp)() throw() ;

you are trying to specify an exception-specification in the declaration of a pointer to a function pointer. That is not allowed by the standard. Exception-specification is allowed only for a limited set of declarations.

From https://timsong-cpp.github.io/cppwp/n3337/except.spec#2 (emphasis mine):

An exception-specification shall appear only on a function declarator for a function type, pointer to function type, reference to function type, or pointer to member function type that is the top-level type of a declaration or definition, or on such a type appearing as a parameter or return type in a function declarator. An exception-specification shall not appear in a typedef declaration or alias-declaration. [ Example:

 void f() throw(int);                    // OK
 void (*fp)() throw (int);               // OK
 void g(void pfa() throw(int));          // OK
 typedef int (*pf)() throw(int);         // ill-formed

end example ] A type denoted in an exception-specification shall not denote an incomplete type. A type denoted in an exception-specification shall not denote a pointer or reference to an incomplete type, other than void*, const void*, volatile void*, or const volatile void*. A type cv T, “array of T”, or “function returning T” denoted in an exception-specification is adjusted to type T, “pointer to T”, or “pointer to function returning T”, respectively.


You asked:

If it is from language specification, what motivates this rule?

I don't have an answer to that.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related