
on Wed Apr 08 2009, Peter Bartlett <pete-AT-pcbartlett.com> wrote:
Quoting Anthony Williams <anthony.ajw@gmail.com>:
Andrey Semashev <andrey.semashev@gmail.com> writes:
Anthony Williams wrote:
In any case, after further thought I remembered the reason I didn't do this before. If the exceptions are header-only then they cannot be thrown from a DLL and caught outside the DLL, since the type-ids won't match. This would mean that any exceptions thrown by the DLL version of boost.thread wouldn't be able to be caught in user code other than by catching std::exception or with catch(...). This is the case for MSVC/Windows anyway --- I'm not sure about other compilers/platforms.
Is it so? On which MSVC version? I'm asking because I throw/catch exceptions across dll boundaries all the time on Windows and haven't had any problems yet. There are some issues on Linux, but they are solved (more or less) with visibility tunings.
Hmm. I'll have to try it out when I get a chance. Maybe I'm mistaken, but that's certainly my recollection.
If everything does work then that hurdle is removed.
Well I do that within my own code all the time too so I know it works on MSVC. But I am in complete control of that code.
Item 62 from Sutter and Alexandrescu, "Don't allow exceptions to propagate across module boundaries", is germane.
So you take that to mean that a DLL shouldn't throw exceptions?
Actually their advice is more specific than the title suggests: "Don't allow exceptions to propagate between two pieces of code unless you control the compiler and compiler options used to build both sides".
...even if you _do_ control both sides? -- Dave Abrahams BoostPro Computing http://www.boostpro.com