4

In the try catch statement we can do:

try{} catch(...){} 

As far as I know, ... means any exception.

My question is: Why the C++ standard chose this way (...) instead of just ()? while, for example, in functions if you do not need parameters you just put ():

void foo(); 

Is it related to variadic templates in any way?

5
  • 4
    In C++, unlike in C, () means (void) it doesn't mean any argument but rather a parameter list with no argument. Commented Apr 20, 2016 at 8:10
  • 2
    Read a book. Commented Apr 20, 2016 at 8:12
  • it is not duplicated of stackoverflow.com/questions/315948/c-catching-all-exceptions. please at least read the question Commented Apr 20, 2016 at 8:14
  • @JoachimPileborg Thanks I will do that Commented Apr 20, 2016 at 8:15
  • 2
    It's just an elegant way to say "anything". Maybe it could be better to use the default key-word in a similar way of switches... Commented Apr 20, 2016 at 8:20

2 Answers 2

8

It has nothing to do with variadic templates, because those came in C++11 whereas catch (...) existed from nearly the beginning (about two decades earlier).

As for why they chose (...) instead of (), you could ask Bjarne Stroustrup, but it hardly seems important. This feature isn't used all that often anyway. In C++, (...) usually means something like "Any number of things of any types" whereas () usually means "Nothing." Depending on your perspective, either one of these might be more preferred for "catch all exceptions."

Sign up to request clarification or add additional context in comments.

1 Comment

It's really often used if you want something robust.
4

catch() would imply strongly that nothing was passed to that particular catch block.

But that is not true,

catch(...){ throw; } 

actually re-throws the exception caught by ...

1 Comment

nice point.. so internally the exception is cached by a hidden variable

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.