diff options
author | Eric Fiselier <eric@efcs.ca> | 2016-08-08 02:22:41 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2016-08-08 02:22:41 +0000 |
commit | 1d711627b4977ff9aef83d61c5fc0c510f561dcb (patch) | |
tree | ee8c2a535d4dbba324e4d9f819019331bcf13b25 | |
parent | 2a65dd1ba608aa2477a397f58194c505ba69cf83 (diff) | |
download | bcm5719-llvm-1d711627b4977ff9aef83d61c5fc0c510f561dcb.tar.gz bcm5719-llvm-1d711627b4977ff9aef83d61c5fc0c510f561dcb.zip |
Fix copy/move constructor annotation for the uses-allocator test types.
Previously the copy/move constructors of the test types did not
properly set the arg_id to T const& or T&& respectivly.
llvm-svn: 277970
-rw-r--r-- | libcxx/test/support/uses_alloc_types.hpp | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/libcxx/test/support/uses_alloc_types.hpp b/libcxx/test/support/uses_alloc_types.hpp index 834e57729a7..0961f729fbd 100644 --- a/libcxx/test/support/uses_alloc_types.hpp +++ b/libcxx/test/support/uses_alloc_types.hpp @@ -119,7 +119,7 @@ using detail::EnableIfB; struct AllocLastTag {}; -template <class Alloc> +template <class Self, class Alloc> struct UsesAllocatorTestBase { public: using CtorAlloc = typename std::conditional< @@ -153,6 +153,16 @@ protected: : args_id(aid), constructor_called(UA_None), allocator() {} + UsesAllocatorTestBase(UsesAllocatorTestBase const&) + : args_id(&makeArgumentID<Self const&>()), constructor_called(UA_None), + allocator() + {} + + UsesAllocatorTestBase(UsesAllocatorTestBase&&) + : args_id(&makeArgumentID<Self&&>()), constructor_called(UA_None), + allocator() + {} + template <class ...Args> UsesAllocatorTestBase(std::allocator_arg_t, CtorAlloc const& a, Args&&...) : args_id(&makeArgumentID<Args&&...>()), @@ -188,12 +198,12 @@ private: }; template <class Alloc, size_t Arity> -class UsesAllocatorV1 : public UsesAllocatorTestBase<Alloc> +class UsesAllocatorV1 : public UsesAllocatorTestBase<UsesAllocatorV1<Alloc, Arity>, Alloc> { public: typedef Alloc allocator_type; - using Base = UsesAllocatorTestBase<Alloc>; + using Base = UsesAllocatorTestBase<UsesAllocatorV1, Alloc>; using CtorAlloc = typename Base::CtorAlloc; UsesAllocatorV1() : Base(&makeArgumentID<>()) {} @@ -218,12 +228,12 @@ public: template <class Alloc, size_t Arity> -class UsesAllocatorV2 : public UsesAllocatorTestBase<Alloc> +class UsesAllocatorV2 : public UsesAllocatorTestBase<UsesAllocatorV2<Alloc, Arity>, Alloc> { public: typedef Alloc allocator_type; - using Base = UsesAllocatorTestBase<Alloc>; + using Base = UsesAllocatorTestBase<UsesAllocatorV2, Alloc>; using CtorAlloc = typename Base::CtorAlloc; UsesAllocatorV2() : Base(&makeArgumentID<>()) {} @@ -240,12 +250,12 @@ public: }; template <class Alloc, size_t Arity> -class UsesAllocatorV3 : public UsesAllocatorTestBase<Alloc> +class UsesAllocatorV3 : public UsesAllocatorTestBase<UsesAllocatorV3<Alloc, Arity>, Alloc> { public: typedef Alloc allocator_type; - using Base = UsesAllocatorTestBase<Alloc>; + using Base = UsesAllocatorTestBase<UsesAllocatorV3, Alloc>; using CtorAlloc = typename Base::CtorAlloc; UsesAllocatorV3() : Base(&makeArgumentID<>()) {} @@ -268,12 +278,12 @@ public: }; template <class Alloc, size_t Arity> -class NotUsesAllocator : public UsesAllocatorTestBase<Alloc> +class NotUsesAllocator : public UsesAllocatorTestBase<NotUsesAllocator<Alloc, Arity>, Alloc> { public: // no allocator_type typedef provided - using Base = UsesAllocatorTestBase<Alloc>; + using Base = UsesAllocatorTestBase<NotUsesAllocator, Alloc>; using CtorAlloc = typename Base::CtorAlloc; NotUsesAllocator() : Base(&makeArgumentID<>()) {} |