PR libstdc++/69293
* include/std/functional (_Function_base::_M_not_empty_function):
Change overloads for pointers to take arguments by value.
* testsuite/20_util/function/cons/57465.cc: Add tests for
pointer-to-member cases.
From-SVN: r232504
2016-01-18 Jonathan Wakely <jwakely@redhat.com>
+ PR libstdc++/69293
+ * include/std/functional (_Function_base::_M_not_empty_function):
+ Change overloads for pointers to take arguments by value.
+ * testsuite/20_util/function/cons/57465.cc: Add tests for
+ pointer-to-member cases.
+
PR libstdc++/69340
* src/c++11/cow-stdexcept.cc (_txnal_cow_string_C1_for_exceptions):
Use macros for exception handling and fix unused parameter warning.
template<typename _Tp>
static bool
- _M_not_empty_function(_Tp* const& __fp)
- { return __fp; }
+ _M_not_empty_function(_Tp* __fp)
+ { return __fp != nullptr; }
template<typename _Class, typename _Tp>
static bool
- _M_not_empty_function(_Tp _Class::* const& __mp)
- { return __mp; }
+ _M_not_empty_function(_Tp _Class::* __mp)
+ { return __mp != nullptr; }
template<typename _Tp>
static bool
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-// libstdc++/57465
-
// { dg-options "-std=gnu++11" }
#include <functional>
#include <testsuite_hooks.h>
-int main()
+void test01()
{
using F = void();
F* f = nullptr;
std::function<F> x(f);
- VERIFY( !x );
+ VERIFY( !x ); // libstdc++/57465
+}
+
+void test02()
+{
+ struct X { };
+ int (X::*mf)() = nullptr;
+ std::function<int(X&)> f = mf;
+ VERIFY( !f ); // libstdc++/69243
+
+ int X::*mp = nullptr;
+ f = mp;
+ VERIFY( !f );
+}
+
+int main()
+{
+ test01();
+ test02();
}