2.cc revision 1.1.1.1
1// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } } 2// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } } 3// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } } 4// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } } 5// { dg-require-cstdint "" } 6// { dg-require-gthreads "" } 7 8// Copyright (C) 2008, 2009 Free Software Foundation, Inc. 9// 10// This file is part of the GNU ISO C++ Library. This library is free 11// software; you can redistribute it and/or modify it under the 12// terms of the GNU General Public License as published by the 13// Free Software Foundation; either version 3, or (at your option) 14// any later version. 15 16// This library is distributed in the hope that it will be useful, 17// but WITHOUT ANY WARRANTY; without even the implied warranty of 18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19// GNU General Public License for more details. 20 21// You should have received a copy of the GNU General Public License along 22// with this library; see the file COPYING3. If not see 23// <http://www.gnu.org/licenses/>. 24 25 26#include <functional> // std::ref 27#include <thread> 28#include <system_error> 29#include <testsuite_hooks.h> 30 31void 32free_function(std::thread::id& id) 33{ 34 id = std::this_thread::get_id(); 35} 36 37// thread::id default cons 38// thread::id copy ctor 39// thread variadic cons, c++ function 40// thread variadic cons joinable 41// thread join 42// thread join postcondition not joinable 43// thread join postcondition function called correctly 44// this_thread::get_id 45void test02() 46{ 47 bool test __attribute__((unused)) = true; 48 49 try 50 { 51 std::thread::id id1; 52 std::thread t(free_function, std::ref(id1)); 53 std::thread::id id2 = t.get_id(); 54 VERIFY( t.joinable() ); 55 t.join(); 56 VERIFY( !t.joinable() ); 57 VERIFY( id1 == id2 ); 58 } 59 catch (const std::system_error&) 60 { 61 VERIFY( false ); 62 } 63 catch (...) 64 { 65 VERIFY( false ); 66 } 67} 68 69int main() 70{ 71 test02(); 72 return 0; 73} 74