commit 7202d181bc2aa72432ef472ace1a37bc841b51c5
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Mon Mar 16 17:54:08 2015 +0000
* libsupc++/nested_exception.h: Do not try to derive from final
classes.
* testsuite/18_support/nested_exception/throw_with_nested.cc: Test
final class.
@@ -108,7 +108,7 @@ namespace std
{ throw static_cast<_Up&&>(__t); }
};
- template<typename _Tp, bool = __is_class(_Tp)>
+ template<typename _Tp, bool = __is_class(_Tp) && !__is_final(_Tp)>
struct _Throw_with_nested_helper : _Throw_with_nested_impl<_Tp>
{ };
@@ -26,6 +26,8 @@ struct derived : std::nested_exception { };
struct not_derived { virtual ~not_derived() noexcept; };
inline not_derived::~not_derived() noexcept = default;
+struct uninheritable final { };
+
void test01()
{
bool test __attribute__((unused)) = false;
@@ -72,9 +74,29 @@ void test02()
VERIFY( test );
}
+void test03()
+{
+ bool test __attribute__((unused)) = false;
+
+ try
+ {
+ std::throw_with_nested(uninheritable());
+ }
+ catch (const std::nested_exception&)
+ {
+ VERIFY( false );
+ }
+ catch(const uninheritable&)
+ {
+ test = true;
+ }
+ VERIFY( test );
+}
+
int main()
{
test01();
test02();
+ test03();
return 0;
}