Hi there, I thought I'd post this because A) it might save someone a lot of head-scratching and B) there aren't any posts on it already. The short of it is, that if you have a setup similar to the following (i.e., an empty throw() clause on a template specialisation): template<class output_type> output_type do_something(int input_value) throw(std::invalid_argument); template<> int do_something(int input_value) throw(std::invalid_argument); template<> long do_something(int input_value) throw(); And attempt to test throwing a std::invalid_argument from within the long specialised function, e.g.: // note: an argument less than zero will throw a std::invalid_argument BOOST_CHECK_THROW(do_something<long>(-1), std::invalid_argument); You will see something the following: Running 4 test cases... terminate called after throwing an instance of 'std::invalid_argument' what(): Input value too low. unknown location(0): fatal error in "long_throw": signal: SIGABRT (application abort requested) sigabrt_test_suite.cpp(58): last checkpoint *** 1 failure detected in test suite "sigabrt tests" My function is throwing a std::invalid_argument and my test case been programmed to catch it. But it doesn't. This had me scratching my head for a few days, until I noticed the empty throw() clause. Completing it resolved the problem immediately. I'm not sure if this is expected behaviour, but if anyone's interested, a test case is attached. I'm using gcc version 4.0.1 (Apple Computer, Inc. build 5367) on a G4 Powerbook with whatever was in Boost's SVN trunk on August 6. Cheers, Richard