Title say it all really, test case is: #include <tr1/type_traits> #include <exception>
static const bool b = std::tr1::is_polymorphic<std::exception>::value; which produces: /usr/local/gcc/4.0.2/lib/gcc/i686-pc-linux-gnu/4.0.2/../../../../include/c++/4.0.2/tr1/type_traits: In instantiation of `std::tr1::__is_polymorphic_helper<std::exception, false>::__second<std::exception>': /usr/local/gcc/4.0.2/lib/gcc/i686-pc-linux-gnu/4.0.2/../../../../include/c++/4.0.2/tr1/type_traits:328: instantiated from `const bool std::tr1::__is_polymorphic_helper<std::exception, false>::__value' /usr/local/gcc/4.0.2/lib/gcc/i686-pc-linux-gnu/4.0.2/../../../../include/c++/4.0.2/tr1/type_traits:338: instantiated from `std::tr1::is_polymorphic<std::exception>' /home/john/boost/libs/type_traits/test/is_polymorphic_test.cpp:61: instantiated from here /usr/local/gcc/4.0.2/lib/gcc/i686-pc-linux-gnu/4.0.2/../../../../include/c++/4.0.2/tr1/type_traits:324: error: looser throw specifier for `std::tr1::__is_polymorphic_helper<_Tp, <anonymous> >::__second<_Up>::~__second() [with _Up = std::exception, _Tp = std::exception, bool <anonymous> = false]' /usr/local/gcc/4.0.2/lib/gcc/i686-pc-linux-gnu/4.0.2/../../../../include/c++/4.0.2/exception:58: error: overriding `virtual std::exception::~exception() throw ()' Regards, John Maddock. -- Summary: is_polymorphic doesn't compile if the argument type has non-throwing destructor Product: gcc Version: 3.0.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: john at johnmaddock dot co dot uk GCC build triplet: linux.x86 GCC host triplet: linux.x86 GCC target triplet: linux.x86 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24809