nested_exception.h: Do not try to derive from final classes.

* libsupc++/nested_exception.h: Do not try to derive from final
	classes.
	* testsuite/18_support/nested_exception/throw_with_nested.cc: Test
	final class.

From-SVN: r221476
This commit is contained in:
Jonathan Wakely 2015-03-17 14:24:55 +00:00 committed by Jonathan Wakely
parent 076d86f3d2
commit 95f2fd9c5d
3 changed files with 30 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2015-03-17 Jonathan Wakely <jwakely@redhat.com>
* libsupc++/nested_exception.h: Do not try to derive from final
classes.
* testsuite/18_support/nested_exception/throw_with_nested.cc: Test
final class.
2015-03-13 Jonathan Wakely <jwakely@redhat.com>
* acinclude.m4: Make --enable-libstdcxx-time=auto work for dragonfly.

View File

@ -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>
{ };

View File

@ -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;
}