Files
clang-p2996/libcxx/test/std/thread/thread.threads/thread.thread.class/thread.thread.id/lt.pass.cpp
Adrian Vogelsgesang 2d34cb74b5 [libc++] Implement thread::id comparators as free functions
So far, the `thread::id` comparators were implemented as hidden friends.
This was non-conforming and lead to incorrectly rejected C++ code, as
can be seen in the linked Github issue.

Fixes https://github.com/llvm/llvm-project/issues/56187

Differential Revision: https://reviews.llvm.org/D131430
2022-08-10 11:39:50 -07:00

55 lines
1.5 KiB
C++

//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// UNSUPPORTED: no-threads
// <thread>
// class thread::id
// bool operator< (thread::id x, thread::id y);
// bool operator<=(thread::id x, thread::id y);
// bool operator> (thread::id x, thread::id y);
// bool operator>=(thread::id x, thread::id y);
#include <thread>
#include <cassert>
#include "test_macros.h"
int main(int, char**)
{
std::thread::id id0;
std::thread::id id1;
std::thread::id id2 = std::this_thread::get_id();
assert(!(id0 < id1));
assert( (id0 <= id1));
assert(!(id0 > id1));
assert( (id0 >= id1));
assert(!(id0 == id2));
if (id0 < id2) {
assert( (id0 <= id2));
assert(!(id0 > id2));
assert(!(id0 >= id2));
} else {
assert(!(id0 <= id2));
assert( (id0 > id2));
assert( (id0 >= id2));
}
// Regression tests for https://github.com/llvm/llvm-project/issues/56187
// libc++ previously declared the comparison operators as hidden friends
// which was non-conforming.
assert(!std::operator<(id0, id1));
assert(std::operator<=(id0, id1));
assert(!std::operator>(id0, id1));
assert(std::operator>=(id0, id1));
return 0;
}