1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <utility> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class T1, class T2> struct pair 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template<size_t I, class T1, class T2> 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// typename tuple_element<I, std::pair<T1, T2> >::type& 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// get(pair<T1, T2>&); 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <utility> 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 218fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clow#if __cplusplus > 201103L 228fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clowstruct S { 238fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clow std::pair<int, int> a; 248fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clow int k; 258fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clow constexpr S() : a{1,2}, k(std::get<0>(a)) {} 268fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clow }; 278fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clow 288fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clowconstexpr std::pair<int, int> getP () { return { 3, 4 }; } 298fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clow#endif 308fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clow 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::pair<int, short> P; 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant P p(3, 4); 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<0>(p) == 3); 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<1>(p) == 4); 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::get<0>(p) = 5; 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::get<1>(p) = 6; 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<0>(p) == 5); 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(std::get<1>(p) == 6); 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 438fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clow 448fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clow#if __cplusplus > 201103L 458fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clow { 468fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clow static_assert(S().k == 1, ""); 478fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clow static_assert(std::get<1>(getP()) == 4, ""); 488fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clow } 498fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clow#endif 508fc4f5a2510e709331c6fcc3ba401a36f98128fcMarshall Clow 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 52