From 66ddd34e8db137234cdf5924c88f148033da5557 Mon Sep 17 00:00:00 2001 From: Eric Fiselier Date: Thu, 17 Nov 2016 19:23:35 +0000 Subject: Test changes for P0504R0 "Revisiting in-place tag types for any/optional/variant". Patch from Casey Carter llvm-svn: 287249 --- .../utility/utility.inplace/inplace.pass.cpp | 91 ++++++++-------------- 1 file changed, 33 insertions(+), 58 deletions(-) (limited to 'libcxx/test/std/utilities/utility') diff --git a/libcxx/test/std/utilities/utility/utility.inplace/inplace.pass.cpp b/libcxx/test/std/utilities/utility/utility.inplace/inplace.pass.cpp index 0cf8e38f5ab..e87c6f399e9 100644 --- a/libcxx/test/std/utilities/utility/utility.inplace/inplace.pass.cpp +++ b/libcxx/test/std/utilities/utility/utility.inplace/inplace.pass.cpp @@ -11,21 +11,24 @@ // -// struct in_place_tag { in_place_tag() = delete; }; -// -// using in_place_t = in_place_tag(&)(unspecified); +// struct in_place_t { +// explicit in_place_t() = default; +// }; +// inline constexpr in_place_t in_place{}; + // template -// using in_place_type_t = in_place_tag(&)(unspecified); -// template -// using in_place_index_t = in_place_tag(&)(unspecified); -// -// in_place_tag in_place(unspecified); -// -// template ; -// in_place_tag in_place(unspecified); -// -// template -// in_place_tag in_place(unspecified); +// struct in_place_type_t { +// explicit in_place_type_t() = default; +// }; +// template +// inline constexpr in_place_type_t in_place_type{}; + +// template +// struct in_place_index_t { +// explicit in_place_index_t() = default; +// }; +// template +// inline constexpr in_place_index_t in_place_index{}; #include #include @@ -34,66 +37,38 @@ #include "test_macros.h" #include "type_id.h" -template -struct CheckRet : std::false_type {}; -template -struct CheckRet : std::true_type {}; - -TypeID const* test_fn(std::in_place_t) { return &makeTypeID(); } -template -TypeID const* test_fn(std::in_place_type_t) -{ return &makeTypeID>(); } - -template -TypeID const* test_fn(std::in_place_index_t) -{ return &makeTypeID>(); } - -// Concrete test overloads that don't have to be deduced. -template -TypeID const* concrete_test_fn(Tag) { return &makeTypeID(); } - -template -bool check_tag_basic() { - using RawTp = typename std::remove_reference::type; - static_assert(std::is_lvalue_reference::value, ""); - static_assert(std::is_function::value, ""); - static_assert(CheckRet::value, ""); - auto concrete_fn = concrete_test_fn; - return test_fn((Tp)std::in_place) == &makeTypeID() - && concrete_fn(std::in_place) == &makeTypeID(); +template +constexpr bool check_tag(Up) { + return std::is_same>::value + && std::is_same::value; } int main() { - // test in_place_tag - { - static_assert(!std::is_default_constructible::value, ""); - } // test in_place_t { using T = std::in_place_t; - assert(check_tag_basic()); - assert(test_fn((T)std::in_place) == &makeTypeID()); + static_assert(check_tag(std::in_place)); } // test in_place_type_t { using T1 = std::in_place_type_t; using T2 = std::in_place_type_t; using T3 = std::in_place_type_t; - assert(check_tag_basic()); - assert(check_tag_basic()); - assert(check_tag_basic()); - static_assert(!std::is_same::value && !std::is_same::value, ""); - static_assert(!std::is_same::value, ""); + static_assert(!std::is_same::value && !std::is_same::value); + static_assert(!std::is_same::value); + static_assert(check_tag(std::in_place_type)); + static_assert(check_tag(std::in_place_type)); + static_assert(check_tag(std::in_place_type)); } // test in_place_index_t { using T1 = std::in_place_index_t<0>; using T2 = std::in_place_index_t<1>; using T3 = std::in_place_index_t(-1)>; - assert(check_tag_basic()); - assert(check_tag_basic()); - assert(check_tag_basic()); - static_assert(!std::is_same::value && !std::is_same::value, ""); - static_assert(!std::is_same::value, ""); + static_assert(!std::is_same::value && !std::is_same::value); + static_assert(!std::is_same::value); + static_assert(check_tag(std::in_place_index<0>)); + static_assert(check_tag(std::in_place_index<1>)); + static_assert(check_tag(std::in_place_index(-1)>)); } -} \ No newline at end of file +} -- cgit v1.2.3