aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <redi@gcc.gnu.org>2017-01-13 12:18:42 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2017-01-13 12:18:42 +0000
commitc6ab9061919bc875199dd0c779f1d71f78f2e274 (patch)
treedd2be1bf61293f8245fe17be99075ff73e20f3c7
parentb3686dde2cf2324ca565416e59e3173dbc6c7a22 (diff)
downloadgcc-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/ChangeLog12
-rw-r--r--libstdc++-v3/include/std/type_traits8
-rw-r--r--libstdc++-v3/testsuite/20_util/add_pointer/value.cc15
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, "");
+}