mirror of
https://github.com/llvm-mirror/libcxx.git
synced 2025-10-23 10:07:41 +08:00

Summary: LWG 3158 marks the allocator_arg_t constructor of std::tuple as conditionnally explicit based on whether the default constructors of the tuple's members are explicitly default constructible. This was previously committed as r372778 and reverted in r372832 due to the commit breaking LLVM's build in C++14 mode. This issue has now been addressed. Reviewers: mclow.lists Subscribers: christof, jkorous, dexonsmith, libcxx-commits Tags: #libc Differential Revision: https://reviews.llvm.org/D65232 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@373092 91177308-0d34-0410-b5e6-96231b3b80d8
34 lines
959 B
C++
34 lines
959 B
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: c++98, c++03
|
|
|
|
// <tuple>
|
|
|
|
// template <class... Types> class tuple;
|
|
|
|
// template <class Alloc>
|
|
// explicit(see-below) tuple(allocator_arg_t, const Alloc& a);
|
|
|
|
// Make sure we get the explicit-ness of the constructor right.
|
|
// This is LWG 3158.
|
|
|
|
#include <tuple>
|
|
#include <memory>
|
|
|
|
|
|
struct ExplicitDefault { explicit ExplicitDefault() { } };
|
|
|
|
std::tuple<ExplicitDefault> explicit_default_test() {
|
|
return {std::allocator_arg, std::allocator<int>()}; // expected-error {{chosen constructor is explicit in copy-initialization}}
|
|
}
|
|
|
|
int main(int, char**) {
|
|
return 0;
|
|
}
|