summaryrefslogtreecommitdiffstats
path: root/libcxx
diff options
context:
space:
mode:
authorMarshall Clow <mclow.lists@gmail.com>2017-04-13 16:57:42 +0000
committerMarshall Clow <mclow.lists@gmail.com>2017-04-13 16:57:42 +0000
commit5948e39297f73a90202a397c317b5c0e63a7fcde (patch)
treed12687794dbce0d1ae8ef2eaeb1b2a0fb9f74404 /libcxx
parent72f8257cba8a40490723bc39c0446a1eb9229cba (diff)
downloadbcm5719-llvm-5948e39297f73a90202a397c317b5c0e63a7fcde.tar.gz
bcm5719-llvm-5948e39297f73a90202a397c317b5c0e63a7fcde.zip
Implement LWG#2855 - made easy by previous refactoring
llvm-svn: 300218
Diffstat (limited to 'libcxx')
-rw-r--r--libcxx/include/exception4
-rw-r--r--libcxx/test/std/language.support/support.exception/except.nested/throw_with_nested.pass.cpp10
-rw-r--r--libcxx/www/cxx1z_status.html4
3 files changed, 14 insertions, 4 deletions
diff --git a/libcxx/include/exception b/libcxx/include/exception
index b12a4c2b26e..181d604d6c1 100644
--- a/libcxx/include/exception
+++ b/libcxx/include/exception
@@ -243,8 +243,8 @@ throw_with_nested (_Tp& __t)
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
{
#ifndef _LIBCPP_NO_EXCEPTIONS
- typedef typename remove_reference<_Tp>::type _Up;
-// static_assert( is_copy_constructible<_Up>::value, "");
+ typedef typename decay<_Tp>::type _Up;
+ static_assert( is_copy_constructible<_Up>::value, "type thrown must be CopyConstructible");
__throw_with_nested<_Tp, _Up,
is_class<_Up>::value &&
!is_base_of<nested_exception, _Up>::value &&
diff --git a/libcxx/test/std/language.support/support.exception/except.nested/throw_with_nested.pass.cpp b/libcxx/test/std/language.support/support.exception/except.nested/throw_with_nested.pass.cpp
index a86d8bcbe20..26be4db38fb 100644
--- a/libcxx/test/std/language.support/support.exception/except.nested/throw_with_nested.pass.cpp
+++ b/libcxx/test/std/language.support/support.exception/except.nested/throw_with_nested.pass.cpp
@@ -107,6 +107,16 @@ int main()
assert(i == 7);
}
}
+ {
+ try
+ {
+ std::throw_with_nested("String literal");
+ assert(false);
+ }
+ catch (const char * s)
+ {
+ }
+ }
#if TEST_STD_VER > 11
{
try
diff --git a/libcxx/www/cxx1z_status.html b/libcxx/www/cxx1z_status.html
index 36c22508524..d4fd8ec6200 100644
--- a/libcxx/www/cxx1z_status.html
+++ b/libcxx/www/cxx1z_status.html
@@ -463,7 +463,7 @@
<tr><td><a href="http://wg21.link/LWG2842">2842</a></td><td>in_place_t check for optional::optional(U&amp;&amp;) should decay U</td><td>Kona</td><td>Complete</td></tr>
<tr><td><a href="http://wg21.link/LWG2850">2850</a></td><td>std::function move constructor does unnecessary work</td><td>Kona</td><td></td></tr>
<tr><td><a href="http://wg21.link/LWG2853">2853</a></td><td>Possible inconsistency in specification of erase in [vector.modifiers]</td><td>Kona</td><td></td></tr>
- <tr><td><a href="http://wg21.link/LWG2855">2855</a></td><td>std::throw_with_nested("string_literal")</td><td>Kona</td><td></td></tr>
+ <tr><td><a href="http://wg21.link/LWG2855">2855</a></td><td>std::throw_with_nested("string_literal")</td><td>Kona</td><td>Complete</td></tr>
<tr><td><a href="http://wg21.link/LWG2857">2857</a></td><td>{variant,optional,any}::emplace should return the constructed value</td><td>Kona</td><td></td></tr>
<tr><td><a href="http://wg21.link/LWG2861">2861</a></td><td>basic_string should require that charT match traits::char_type</td><td>Kona</td><td>Complete</td></tr>
<tr><td><a href="http://wg21.link/LWG2866">2866</a></td><td>Incorrect derived classes constraints</td><td>Kona</td><td></td></tr>
@@ -489,7 +489,7 @@
<!-- <tr><td></td><td></td><td></td><td></td></tr> -->
</table>
- <p>Last Updated: 11-Apr-2017</p>
+ <p>Last Updated: 13-Apr-2017</p>
</div>
</body>
</html>
OpenPOWER on IntegriCloud