From bb9ca6d0bfc2d2111025d8e342279163458a8639 Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Mon, 3 Dec 2018 14:03:27 +0000 Subject: [libcxx] Implement P0318: unwrap_ref_decay and unwrap_reference Summary: This was voted into C++20 in San Diego. Note that there was a revision D0318R2 which did include unwrap_reference_t, but we mistakingly voted P0318R1 into the C++20 Working Draft (which does not include unwrap_reference_t). This patch implements D0318R2, which is what we'll end up with in the Working Draft once this mistake has been fixed. Reviewers: EricWF, mclow.lists Subscribers: christof, dexonsmith, libcxx-commits Differential Revision: https://reviews.llvm.org/D54485 llvm-svn: 348138 --- .../refwrap/unwrap_reference.pass.cpp | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 libcxx/test/std/utilities/function.objects/refwrap/unwrap_reference.pass.cpp (limited to 'libcxx/test/std/utilities/function.objects/refwrap/unwrap_reference.pass.cpp') diff --git a/libcxx/test/std/utilities/function.objects/refwrap/unwrap_reference.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/unwrap_reference.pass.cpp new file mode 100644 index 00000000000..441ddf4bd56 --- /dev/null +++ b/libcxx/test/std/utilities/function.objects/refwrap/unwrap_reference.pass.cpp @@ -0,0 +1,51 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// +// +// template +// struct unwrap_reference; +// +// template +// using unwrap_reference_t = typename unwrap_reference::type; + +// UNSUPPORTED: c++98, c++03, c++11, c++14, c++17 + +#include +#include + + +template +void check_equal() { + static_assert(std::is_same_v::type, Expected>); + static_assert(std::is_same_v::type, std::unwrap_reference_t>); +} + +template +void check() { + check_equal(); + check_equal(); + check_equal(); + check_equal(); + + check_equal, T&>(); + check_equal, T const&>(); +} + +struct T { }; + +int main() { + check(); + check(); + check(); + + check(); + check(); + check(); +} -- cgit v1.2.3