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:
parent
076d86f3d2
commit
95f2fd9c5d
@ -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.
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user