brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · ec3d7e4 Raw
58 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// <utility>10 11// template <class T1, class T2> struct pair12 13// tuple_element<I, pair<T1, T2> >::type14 15#include <type_traits>16#include <utility>17 18template <class T1, class T2>19void test()20{21    {22    typedef T1 Exp1;23    typedef T2 Exp2;24    typedef std::pair<T1, T2> P;25    static_assert((std::is_same<typename std::tuple_element<0, P>::type, Exp1>::value), "");26    static_assert((std::is_same<typename std::tuple_element<1, P>::type, Exp2>::value), "");27    }28    {29    typedef T1 const Exp1;30    typedef T2 const Exp2;31    typedef std::pair<T1, T2> const P;32    static_assert((std::is_same<typename std::tuple_element<0, P>::type, Exp1>::value), "");33    static_assert((std::is_same<typename std::tuple_element<1, P>::type, Exp2>::value), "");34    }35    {36    typedef T1 volatile Exp1;37    typedef T2 volatile Exp2;38    typedef std::pair<T1, T2> volatile P;39    static_assert((std::is_same<typename std::tuple_element<0, P>::type, Exp1>::value), "");40    static_assert((std::is_same<typename std::tuple_element<1, P>::type, Exp2>::value), "");41    }42    {43    typedef T1 const volatile Exp1;44    typedef T2 const volatile Exp2;45    typedef std::pair<T1, T2> const volatile P;46    static_assert((std::is_same<typename std::tuple_element<0, P>::type, Exp1>::value), "");47    static_assert((std::is_same<typename std::tuple_element<1, P>::type, Exp2>::value), "");48    }49}50 51int main(int, char**)52{53    test<int, short>();54    test<int*, char>();55 56  return 0;57}58