@@ -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
{ };
@@ -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, "");
+}