diff --git a/libcxx/include/barrier b/libcxx/include/barrier --- a/libcxx/include/barrier +++ b/libcxx/include/barrier @@ -298,7 +298,7 @@ } _LIBCPP_AVAILABILITY_SYNC _LIBCPP_INLINE_VISIBILITY - barrier(ptrdiff_t __count, _CompletionF __completion = _CompletionF()) + explicit barrier(ptrdiff_t __count, _CompletionF __completion = _CompletionF()) : __b_(__count, _VSTD::move(__completion)) { } diff --git a/libcxx/test/std/thread/thread.barrier/ctor.compile.pass.cpp b/libcxx/test/std/thread/thread.barrier/ctor.compile.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/thread/thread.barrier/ctor.compile.pass.cpp @@ -0,0 +1,22 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// UNSUPPORTED: c++03, c++11 + +// + +// explicit barrier(ptrdiff_t __count, _CompletionF __completion = _CompletionF()); + +// Make sure that the ctor of barrier is explicit. + +#include + +#include "test_convertible.h" + +static_assert(!test_convertible, std::ptrdiff_t>(), "This constructor must be explicit");