Message ID | CAFk2RUZJVkONk+o=ickt5PDb76ZJheP+W=PhDnMQg2fph7ZdyQ@mail.gmail.com |
---|---|
State | New |
Headers | show |
On 05/06/16 21:15 +0300, Ville Voutilainen wrote: > { > public: > void swap(tuple&) noexcept { /* no-op */ } >+ // We need the default since we're going to define no-op >+ // allocator constructors. >+ tuple() = default; >+ // No-op allocator constructors. >+ template<typename _Alloc> >+ tuple(allocator_arg_t __tag, const _Alloc& __a) { } >+ template<typename _Alloc> >+ tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in) { } Please remove the names of the unused parameters, so we don't get warnings with -Wsystem-headers -Wunused-parameter. OK with that change, thanks.
diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple index 17c8204..7570883 100644 --- a/libstdc++-v3/include/std/tuple +++ b/libstdc++-v3/include/std/tuple @@ -876,6 +876,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { public: void swap(tuple&) noexcept { /* no-op */ } + // We need the default since we're going to define no-op + // allocator constructors. + tuple() = default; + // No-op allocator constructors. + template<typename _Alloc> + tuple(allocator_arg_t __tag, const _Alloc& __a) { } + template<typename _Alloc> + tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in) { } }; /// Partial specialization, 2-element tuple. diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/allocators.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/allocators.cc index 052b79f..bc45780 100644 --- a/libstdc++-v3/testsuite/20_util/tuple/cons/allocators.cc +++ b/libstdc++-v3/testsuite/20_util/tuple/cons/allocators.cc @@ -162,8 +162,30 @@ void test01() } +void test02() +{ + bool test __attribute__((unused)) = true; + using std::allocator_arg; + using std::tuple; + using std::make_tuple; + + typedef tuple<> test_type; + + MyAlloc a; + + // default construction + test_type t1(allocator_arg, a); + // copy construction + test_type t2(allocator_arg, a, t1); + // move construction + test_type t3(allocator_arg, a, std::move(t1)); + // make_tuple + test_type empty = make_tuple(); +} + int main() { test01(); + test02(); return 0; }