diff options
author | Jonathan Wakely <redi@gcc.gnu.org> | 2017-01-13 12:18:42 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2017-01-13 12:18:42 +0000 |
commit | c6ab9061919bc875199dd0c779f1d71f78f2e274 (patch) | |
tree | dd2be1bf61293f8245fe17be99075ff73e20f3c7 | |
parent | b3686dde2cf2324ca565416e59e3173dbc6c7a22 (diff) | |
download | gcc-c6ab9061919bc875199dd0c779f1d71f78f2e274.zip gcc-c6ab9061919bc875199dd0c779f1d71f78f2e274.tar.gz gcc-c6ab9061919bc875199dd0c779f1d71f78f2e274.tar.bz2 |
PR78361 recognise noexcept functions as referenceable
2017-01-13 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/78361
* testsuite/20_util/add_pointer/value.cc: Test forming function
pointers.
2017-01-13 Michael Brune <lucdanton@free.fr>
PR libstdc++/78361
* include/std/type_traits (__is_referenceable): Handle noexcept
function types.
From-SVN: r244432
-rw-r--r-- | libstdc++-v3/ChangeLog | 12 | ||||
-rw-r--r-- | libstdc++-v3/include/std/type_traits | 8 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/add_pointer/value.cc | 15 |
3 files changed, 31 insertions, 4 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 8bf7d07..3421ed1 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,15 @@ +2017-01-13 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/78361 + * testsuite/20_util/add_pointer/value.cc: Test forming function + pointers. + +2017-01-13 Michael Brune <lucdanton@free.fr> + + PR libstdc++/78361 + * include/std/type_traits (__is_referenceable): Handle noexcept + function types. + 2017-01-12 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/77528 diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index d0fa390..a50f06c 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -641,13 +641,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : public __or_<is_object<_Tp>, is_reference<_Tp>>::type { }; - template<typename _Res, typename... _Args> - struct __is_referenceable<_Res(_Args...)> + template<typename _Res, typename... _Args _GLIBCXX_NOEXCEPT_PARM> + struct __is_referenceable<_Res(_Args...) _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; - template<typename _Res, typename... _Args> - struct __is_referenceable<_Res(_Args......)> + template<typename _Res, typename... _Args _GLIBCXX_NOEXCEPT_PARM> + struct __is_referenceable<_Res(_Args......) _GLIBCXX_NOEXCEPT_QUAL> : public true_type { }; diff --git a/libstdc++-v3/testsuite/20_util/add_pointer/value.cc b/libstdc++-v3/testsuite/20_util/add_pointer/value.cc index e0688cb..a2f1e67 100644 --- a/libstdc++-v3/testsuite/20_util/add_pointer/value.cc +++ b/libstdc++-v3/testsuite/20_util/add_pointer/value.cc @@ -34,3 +34,18 @@ void test01() ClassType**>::value, ""); static_assert(is_same<add_pointer<ClassType>::type, ClassType*>::value, ""); } + +void test02() +{ + using std::add_pointer; + using std::is_same; + + void f1(); + using f1_type = decltype(f1); + using pf1_type = decltype(&f1); + static_assert(is_same<add_pointer<f1_type>::type, pf1_type>::value, ""); + void f2() noexcept; // PR libstdc++/78361 + using f2_type = decltype(f2); + using pf2_type = decltype(&f2); + static_assert(is_same<add_pointer<f2_type>::type, pf2_type>::value, ""); +} |