```
template <typename T>
Blob<T>::Blob(std::initializer_list<T> il) try :
data(std::make_shared<std::vector<T>>(il)) {
/* empty body */
} catch(const std::bad_alloc &e) { handle_out_of_memory(e); }

```

C ++ Primer fifth edition 779 page said

> 
> Notice that the keyword try appears before the colon that begins the constructor
>  initializer list and before the curly brace that forms the (in this case empty) constructor
>  function body. The catch associated with this try can be used to handle exceptions
>  thrown either from within the member initialization list or from within the constructor
>  body.
>  It is worth noting that an exception can happen while initializing the constructor’s
>  parameters. Such exceptions are not part of the function try block. The function try
>  block handles only exceptions that occur once the constructor begins executing. As
>  with any other function call, if an exception occurs during parameter initialization, that
>  exception is part of the calling expression and is handled in the caller’s context.
> 
> 
> 

I am confused and can not think of a situation where/when it happens，can anyone give me
an example?