diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2016-04-18 17:16:14 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2016-04-18 17:16:14 +0100 |
commit | b05cf382e0eb741b7b8ee1f7b02fa6e5a7a3d491 (patch) | |
tree | 6b86034e774f4421e6020e5ed1693f5a988eafd5 | |
parent | 4ed6e5244652aa10eb56ab0cfa6768654f16f854 (diff) | |
download | gcc-b05cf382e0eb741b7b8ee1f7b02fa6e5a7a3d491.zip gcc-b05cf382e0eb741b7b8ee1f7b02fa6e5a7a3d491.tar.gz gcc-b05cf382e0eb741b7b8ee1f7b02fa6e5a7a3d491.tar.bz2 |
Define std::thread::id comparison operators at namespace-scope
From-SVN: r235155
-rw-r--r-- | libstdc++-v3/ChangeLog | 5 | ||||
-rw-r--r-- | libstdc++-v3/include/std/thread | 34 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/30_threads/thread/id/70294.cc | 24 |
3 files changed, 49 insertions, 14 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 385363b..14c1c2c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,10 @@ 2016-04-18 Jonathan Wakely <jwakely@redhat.com> + PR libstdc++/70294 + * include/std/thread (operator<, operator==): Move definitions to + namespace-scope. + * testsuite/30_threads/thread/id/70294.cc: New test. + * testsuite/18_support/bad_exception/23591_thread-1.c: Add -Wno-pedantic to dg-options. * testsuite/20_util/align/2.cc: Use type as operand of alignof. diff --git a/libstdc++-v3/include/std/thread b/libstdc++-v3/include/std/thread index ad31fbc..15aa9a9 100644 --- a/libstdc++-v3/include/std/thread +++ b/libstdc++-v3/include/std/thread @@ -88,22 +88,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION friend class hash<thread::id>; friend bool - operator==(thread::id __x, thread::id __y) noexcept - { - // pthread_equal is undefined if either thread ID is not valid, so we - // can't safely use __gthread_equal on default-constructed values (nor - // the non-zero value returned by this_thread::get_id() for - // single-threaded programs using GNU libc). Assume EqualityComparable. - return __x._M_thread == __y._M_thread; - } + operator==(thread::id __x, thread::id __y) noexcept; friend bool - operator<(thread::id __x, thread::id __y) noexcept - { - // Pthreads doesn't define any way to do this, so we just have to - // assume native_handle_type is LessThanComparable. - return __x._M_thread < __y._M_thread; - } + operator<(thread::id __x, thread::id __y) noexcept; template<class _CharT, class _Traits> friend basic_ostream<_CharT, _Traits>& @@ -231,10 +219,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { __x.swap(__y); } inline bool + operator==(thread::id __x, thread::id __y) noexcept + { + // pthread_equal is undefined if either thread ID is not valid, so we + // can't safely use __gthread_equal on default-constructed values (nor + // the non-zero value returned by this_thread::get_id() for + // single-threaded programs using GNU libc). Assume EqualityComparable. + return __x._M_thread == __y._M_thread; + } + + inline bool operator!=(thread::id __x, thread::id __y) noexcept { return !(__x == __y); } inline bool + operator<(thread::id __x, thread::id __y) noexcept + { + // Pthreads doesn't define any way to do this, so we just have to + // assume native_handle_type is LessThanComparable. + return __x._M_thread < __y._M_thread; + } + + inline bool operator<=(thread::id __x, thread::id __y) noexcept { return !(__y < __x); } diff --git a/libstdc++-v3/testsuite/30_threads/thread/id/70294.cc b/libstdc++-v3/testsuite/30_threads/thread/id/70294.cc new file mode 100644 index 0000000..9717637 --- /dev/null +++ b/libstdc++-v3/testsuite/30_threads/thread/id/70294.cc @@ -0,0 +1,24 @@ +// Copyright (C) 2016 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// { dg-options "-std=gnu++11" } +// { dg-do compile } + +#include <thread> + +bool (*lt)(std::thread::id, std::thread::id) = &std::operator<; +bool (*eq)(std::thread::id, std::thread::id) = &std::operator==; |