mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-10 02:34:30 +08:00
LWG 2510, make the default constructors of library tag types explicit.
2015-11-10 Ville Voutilainen <ville.voutilainen@gmail.com> LWG 2510, make the default constructors of library tag types explicit. * include/bits/mutex.h (defer_lock_t, try_lock_t, adopt_lock_t): Add an explicit default constructor. * include/bits/stl_pair.h (piecewise_construct_t): Likewise. * include/bits/uses_allocator.h (allocator_arg_t): Likewise. * libsupc++/new (nothrow_t): Likewise. * testsuite/17_intro/tag_type_explicit_ctor.cc: New. From-SVN: r230175
This commit is contained in:
parent
e78bede6f7
commit
269fa2a91b
@ -1,3 +1,14 @@
|
|||||||
|
2015-11-10 Ville Voutilainen <ville.voutilainen@gmail.com>
|
||||||
|
|
||||||
|
LWG 2510, make the default constructors of library tag types
|
||||||
|
explicit.
|
||||||
|
* include/bits/mutex.h (defer_lock_t, try_lock_t,
|
||||||
|
adopt_lock_t): Add an explicit default constructor.
|
||||||
|
* include/bits/stl_pair.h (piecewise_construct_t): Likewise.
|
||||||
|
* include/bits/uses_allocator.h (allocator_arg_t): Likewise.
|
||||||
|
* libsupc++/new (nothrow_t): Likewise.
|
||||||
|
* testsuite/17_intro/tag_type_explicit_ctor.cc: New.
|
||||||
|
|
||||||
2015-11-11 Jonathan Wakely <jwakely@redhat.com>
|
2015-11-11 Jonathan Wakely <jwakely@redhat.com>
|
||||||
|
|
||||||
PR libstdc++/64651
|
PR libstdc++/64651
|
||||||
|
@ -129,14 +129,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||||||
#endif // _GLIBCXX_HAS_GTHREADS
|
#endif // _GLIBCXX_HAS_GTHREADS
|
||||||
|
|
||||||
/// Do not acquire ownership of the mutex.
|
/// Do not acquire ownership of the mutex.
|
||||||
struct defer_lock_t { };
|
struct defer_lock_t { explicit defer_lock_t() = default; };
|
||||||
|
|
||||||
/// Try to acquire ownership of the mutex without blocking.
|
/// Try to acquire ownership of the mutex without blocking.
|
||||||
struct try_to_lock_t { };
|
struct try_to_lock_t { explicit try_to_lock_t() = default; };
|
||||||
|
|
||||||
/// Assume the calling thread has already obtained mutex ownership
|
/// Assume the calling thread has already obtained mutex ownership
|
||||||
/// and manage it.
|
/// and manage it.
|
||||||
struct adopt_lock_t { };
|
struct adopt_lock_t { explicit adopt_lock_t() = default; };
|
||||||
|
|
||||||
constexpr defer_lock_t defer_lock { };
|
constexpr defer_lock_t defer_lock { };
|
||||||
constexpr try_to_lock_t try_to_lock { };
|
constexpr try_to_lock_t try_to_lock { };
|
||||||
|
@ -73,7 +73,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||||||
|
|
||||||
#if __cplusplus >= 201103L
|
#if __cplusplus >= 201103L
|
||||||
/// piecewise_construct_t
|
/// piecewise_construct_t
|
||||||
struct piecewise_construct_t { };
|
struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
|
||||||
|
|
||||||
/// piecewise_construct
|
/// piecewise_construct
|
||||||
constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t();
|
constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t();
|
||||||
|
@ -36,7 +36,7 @@ namespace std _GLIBCXX_VISIBILITY(default)
|
|||||||
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
_GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
|
|
||||||
/// [allocator.tag]
|
/// [allocator.tag]
|
||||||
struct allocator_arg_t { };
|
struct allocator_arg_t { explicit allocator_arg_t() = default; };
|
||||||
|
|
||||||
constexpr allocator_arg_t allocator_arg = allocator_arg_t();
|
constexpr allocator_arg_t allocator_arg = allocator_arg_t();
|
||||||
|
|
||||||
|
@ -79,7 +79,12 @@ namespace std
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct nothrow_t { };
|
struct nothrow_t
|
||||||
|
{
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
explicit nothrow_t() = default;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
extern const nothrow_t nothrow;
|
extern const nothrow_t nothrow;
|
||||||
|
|
||||||
|
60
libstdc++-v3/testsuite/17_intro/tag_type_explicit_ctor.cc
Normal file
60
libstdc++-v3/testsuite/17_intro/tag_type_explicit_ctor.cc
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
// { dg-do compile }
|
||||||
|
// { dg-options "-std=gnu++11" }
|
||||||
|
|
||||||
|
// Copyright (C) 2015 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/>.
|
||||||
|
|
||||||
|
#include <new>
|
||||||
|
#include <utility>
|
||||||
|
#include <memory>
|
||||||
|
#include <mutex>
|
||||||
|
|
||||||
|
void f1(std::nothrow_t);
|
||||||
|
void f2(std::piecewise_construct_t);
|
||||||
|
void f3(std::allocator_arg_t);
|
||||||
|
void f4(std::defer_lock_t);
|
||||||
|
void f5(std::try_to_lock_t);
|
||||||
|
void f6(std::adopt_lock_t);
|
||||||
|
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
std::nothrow_t v1;
|
||||||
|
std::piecewise_construct_t v2;
|
||||||
|
std::allocator_arg_t v3;
|
||||||
|
std::defer_lock_t v4;
|
||||||
|
std::try_to_lock_t v5;
|
||||||
|
std::try_to_lock_t v6;
|
||||||
|
std::nothrow_t v7 = {}; // { dg-error "explicit" }
|
||||||
|
std::piecewise_construct_t v8 = {}; // { dg-error "explicit" }
|
||||||
|
std::allocator_arg_t v9 = {}; // { dg-error "explicit" }
|
||||||
|
std::defer_lock_t v10 = {}; // { dg-error "explicit" }
|
||||||
|
std::try_to_lock_t v11 = {}; // { dg-error "explicit" }
|
||||||
|
std::try_to_lock_t v12 = {}; // { dg-error "explicit" }
|
||||||
|
f1(std::nothrow_t{});
|
||||||
|
f2(std::piecewise_construct_t{});
|
||||||
|
f3(std::allocator_arg_t{});
|
||||||
|
f4(std::defer_lock_t{});
|
||||||
|
f5(std::try_to_lock_t{});
|
||||||
|
f6(std::adopt_lock_t{});
|
||||||
|
f1({}); // { dg-error "explicit" }
|
||||||
|
f2({}); // { dg-error "explicit" }
|
||||||
|
f3({}); // { dg-error "explicit" }
|
||||||
|
f4({}); // { dg-error "explicit" }
|
||||||
|
f5({}); // { dg-error "explicit" }
|
||||||
|
f6({}); // { dg-error "explicit" }
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user