//===----------------------------------------------------------------------===// // // 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. // //===----------------------------------------------------------------------===// // <utility> // template <class T1, class T2> struct pair // tuple_element<I, pair<T1, T2> >::type #include <utility> template <class T1, class T2> void test() { { typedef T1 Exp1; typedef T2 Exp2; typedef std::pair<T1, T2> P; static_assert((std::is_same<typename std::tuple_element<0, P>::type, Exp1>::value), ""); static_assert((std::is_same<typename std::tuple_element<1, P>::type, Exp2>::value), ""); } { typedef T1 const Exp1; typedef T2 const Exp2; typedef std::pair<T1, T2> const P; static_assert((std::is_same<typename std::tuple_element<0, P>::type, Exp1>::value), ""); static_assert((std::is_same<typename std::tuple_element<1, P>::type, Exp2>::value), ""); } { typedef T1 volatile Exp1; typedef T2 volatile Exp2; typedef std::pair<T1, T2> volatile P; static_assert((std::is_same<typename std::tuple_element<0, P>::type, Exp1>::value), ""); static_assert((std::is_same<typename std::tuple_element<1, P>::type, Exp2>::value), ""); } { typedef T1 const volatile Exp1; typedef T2 const volatile Exp2; typedef std::pair<T1, T2> const volatile P; static_assert((std::is_same<typename std::tuple_element<0, P>::type, Exp1>::value), ""); static_assert((std::is_same<typename std::tuple_element<1, P>::type, Exp2>::value), ""); } } int main() { test<int, short>(); test<int*, char>(); }