PR78361 recognise noexcept functions as referenceable
authorJonathan Wakely <redi@gcc.gnu.org>
Fri, 13 Jan 2017 12:18:42 +0000 (12:18 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Fri, 13 Jan 2017 12:18:42 +0000 (12:18 +0000)
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

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/type_traits
libstdc++-v3/testsuite/20_util/add_pointer/value.cc

index 8bf7d07b9e9fbb9108cbc7311122811de355c7a9..3421ed102eacc9b80bebc76813231cf1b80bd18e 100644 (file)
@@ -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
index d0fa390ceac8066f424c8551f11f884e19cafe9d..a50f06ca46a627dbb467c2626fe2f0df48f299d3 100644 (file)
@@ -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
     { };
 
index e0688cbc4cec5bb55744f9fe726fcd48b8018f37..a2f1e6713669af56af7e3f10d621cde703f4e203 100644 (file)
@@ -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, "");
+}