And of course you can catch these some layers higher and transform these exceptions into the needed ones.

e.g.


void scan_directories(fs::path const& path)
{
   //....
}


void do_smth()
{
  //...
}


void foo()
{
   scan_directories("c:“);
}


void rethow_my_exception(std::exception const& e)
{
   //could be
    throw std::logic_error(std::string("execution failed: ").append(e.what()));
}

//you can even overload rethrow_my_exception for different formattings

void bar()
{
     try
     {
         foo();
         do_smth();
     }
     catch(std::exception const& e)
     {
         rethrow_my_exception(e);
     }
}

As you see, there are no limits.

Good Luck,
Ovanes

On Wed, Apr 29, 2009 at 4:26 PM, Ovanes Markarian <om_boost@keywallet.com> wrote:


On Wed, Apr 29, 2009 at 3:20 PM, Max <more4less@sina.com> wrote:
Hello Ovanes,

Thanks for your reply.

You means like this?

       catch ( const fs::basic_filesystem_error<fs::path>& e )
       {
               // transform e.what() to a new string by search and replace
               // rethrow an exception
       }

That would be ok for this single case. But who knows if there's other
similar cases that need this similar hand-written code processing?
I want to depress the similar message in a uniform way.

You can also catch more general exceptions like:
boost::system_error or std::runtime_error or std::exception (or any other unknown exception via catch(...) )

And handle them...

Regards,
Ovanes