brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 7062b20 Raw
62 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <functional>10//11// template <class T>12// struct unwrap_ref_decay;13//14// template <class T>15// using unwrap_ref_decay_t = typename unwrap_ref_decay<T>::type;16 17// UNSUPPORTED: c++03, c++11, c++14, c++1718 19#include <functional>20#include <type_traits>21 22#include "test_macros.h"23 24 25template <typename T, typename Result>26void check() {27  static_assert(std::is_same_v<typename std::unwrap_ref_decay<T>::type, Result>);28  static_assert(std::is_same_v<typename std::unwrap_ref_decay<T>::type, std::unwrap_ref_decay_t<T>>);29}30 31struct T { };32 33int main(int, char**) {34  check<T,             T>();35  check<T&,            T>();36  check<T const,       T>();37  check<T const&,      T>();38  check<T*,            T*>();39  check<T const*,      T const*>();40  check<T[3],          T*>();41  check<T const [3],   T const*>();42  check<T (),          T (*)()>();43  check<T (int) const, T (int) const>();44  check<T (int) &,     T (int) &>();45  check<T (int) &&,    T (int) &&>();46 47  check<std::reference_wrapper<T>,         T&>();48  check<std::reference_wrapper<T>&,        T&>();49  check<std::reference_wrapper<T const>,   T const&>();50  check<std::reference_wrapper<T const>&,  T const&>();51  check<std::reference_wrapper<T*>,        T*&>();52  check<std::reference_wrapper<T*>&,       T*&>();53  check<std::reference_wrapper<T const*>,  T const*&>();54  check<std::reference_wrapper<T const*>&, T const*&>();55  check<std::reference_wrapper<T[3]>,      T (&)[3]>();56  check<std::reference_wrapper<T[3]>&,     T (&)[3]>();57  check<std::reference_wrapper<T ()>,      T (&)()>();58  check<std::reference_wrapper<T ()>&,     T (&)()>();59 60  return 0;61}62