forward_as_tuple.pass.cpp revision 1d927e38d1f2d98d79f95997011f011d2cb2aef8
1d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 264924859b6b09d1cfb62fecf5954ec6c27cb58feTed Kremenek// 34af84313df0d2710fd57af89132e680294225cadTed Kremenek// The LLVM Compiler Infrastructure 4d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek// 5d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek// This file is dual licensed under the MIT and the University of Illinois Open 6d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek// Source Licenses. See LICENSE.TXT for details. 7d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek// 8d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek//===----------------------------------------------------------------------===// 9d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek 1077349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek// <tuple> 1177349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek 1277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek// template<class... Types> 13d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek// tuple<Types&&...> forward_as_tuple(Types&&... t); 14d27f8169f4b68337a489547a41ac45bf7a5d1ddfTed Kremenek 15a7af5ea88a6c5bdf87497cca6c20831e8c546751Argyrios Kyrtzidis#include <tuple> 1643dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include <cassert> 179b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek 189b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenektemplate <class Tuple> 199b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenekvoid 209b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenektest0(const Tuple& t) 21d1e5a89226da79f7e6f43d40facc46abda9e5245Jordy Rose{ 22199c3d6cd16aebbb9c7f0d42af9d922c9628bf70Ken Dyck static_assert(std::tuple_size<Tuple>::value == 0, ""); 2316f0049415ec596504891259e2a83e19871c0d52Chris Lattner} 2416f0049415ec596504891259e2a83e19871c0d52Chris Lattner 25c506357c3778092c2a3251243f12524e8eb89274Zhongxing Xutemplate <class Tuple> 261b63e4f732dbc73d90abf886b4d21f8e3a165f6dChris Lattnervoid 2716f0049415ec596504891259e2a83e19871c0d52Chris Lattnertest1a(const Tuple& t) 28e97ca065c91ff9ca2a2a42eb443eaa553c40441cTed Kremenek{ 290bed8a12f2878d3cd94fb8bdba55b593d92dd11aTed Kremenek static_assert(std::tuple_size<Tuple>::value == 1, ""); 30a95d3750441ac8ad03e36af8e6e74039c9a3109dTed Kremenek static_assert(std::is_same<typename std::tuple_element<0, Tuple>::type, int&&>::value, ""); 316cb7c1a43b0c8f739d1f54b7fdae5ede86033496Benjamin Kramer assert(std::get<0>(t) == 1); 324323a57627e796dcfdfdb7d47672dc09ed308edaTed Kremenek} 330f5f0595d6a038843a7051c5a65fca7bce2915a0Ted Kremenek 340f5f0595d6a038843a7051c5a65fca7bce2915a0Ted Kremenektemplate <class Tuple> 350f5f0595d6a038843a7051c5a65fca7bce2915a0Ted Kremenekvoid 360f5f0595d6a038843a7051c5a65fca7bce2915a0Ted Kremenektest1b(const Tuple& t) 37b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek{ 389ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremenek static_assert(std::tuple_size<Tuple>::value == 1, ""); 39b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek static_assert(std::is_same<typename std::tuple_element<0, Tuple>::type, int&>::value, ""); 40ab2b8c54bca82866876f91e756788916d3fa20c3Ted Kremenek assert(std::get<0>(t) == 2); 41e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenek} 4232c4995826c76f282fc05fbbc3241d2dded4fb57Ted Kremenek 4332c4995826c76f282fc05fbbc3241d2dded4fb57Ted Kremenektemplate <class Tuple> 4432c4995826c76f282fc05fbbc3241d2dded4fb57Ted Kremenekvoid 459c378f705405d37f49795d5e915989de774fe11fTed Kremenektest2a(const Tuple& t) 4632c4995826c76f282fc05fbbc3241d2dded4fb57Ted Kremenek{ 4732c4995826c76f282fc05fbbc3241d2dded4fb57Ted Kremenek static_assert(std::tuple_size<Tuple>::value == 2, ""); 4832c4995826c76f282fc05fbbc3241d2dded4fb57Ted Kremenek static_assert(std::is_same<typename std::tuple_element<0, Tuple>::type, double&>::value, ""); 4932c4995826c76f282fc05fbbc3241d2dded4fb57Ted Kremenek static_assert(std::is_same<typename std::tuple_element<1, Tuple>::type, char&>::value, ""); 5032c4995826c76f282fc05fbbc3241d2dded4fb57Ted Kremenek assert(std::get<0>(t) == 2.5); 51bdb435ddaafd5069becd543d638112f68825b89dTed Kremenek assert(std::get<1>(t) == 'a'); 52bdb435ddaafd5069becd543d638112f68825b89dTed Kremenek} 53bdb435ddaafd5069becd543d638112f68825b89dTed Kremenek 5417a38e2636a8b1ce473fc6504c4b16cb09db29f4Jordy Rose#if _LIBCPP_STD_VER > 11 5525e695b2d574d919cc1bbddf3a2efe073d449b1cZhongxing Xutemplate <class Tuple> 56d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidisconstexpr int 57d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidistest3(const Tuple& t) 5850a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek{ 59c77a55126fcad66fb086f8e100a494caa2496a2dZhongxing Xu return std::tuple_size<Tuple>::value; 6032a58084a4c53e6938dd81bfce224db25a5976d1Ted Kremenek} 6132a58084a4c53e6938dd81bfce224db25a5976d1Ted Kremenek#endif 6250a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek 63c8413fd03f73084a5c93028f8b4db619fc388087Ted Kremenekint main() 640a3ed3143b00f237decb1288c1ff574ae09eba4eTed Kremenek{ 65a5a4166f8cb04490b7b27355874edfb98837cd45Zhongxing Xu { 66c77a55126fcad66fb086f8e100a494caa2496a2dZhongxing Xu test0(std::forward_as_tuple()); 67e1b364324b94e54c610a1681ab96df755ba766fdJordy Rose } 68d767d81290288c030f3be0be1d3e62b9c8df51dcTed Kremenek { 69d767d81290288c030f3be0be1d3e62b9c8df51dcTed Kremenek test1a(std::forward_as_tuple(1)); 70d767d81290288c030f3be0be1d3e62b9c8df51dcTed Kremenek } 71d767d81290288c030f3be0be1d3e62b9c8df51dcTed Kremenek { 72d767d81290288c030f3be0be1d3e62b9c8df51dcTed Kremenek int i = 2; 73c80135ba857da48173578b9c528fce6777e18168Ted Kremenek test1b(std::forward_as_tuple(i)); 7450a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek } 75d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis { 76cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek double i = 2.5; 77e448ab4f9dd162802f5d7cfea60f7830cc61c654Ted Kremenek char c = 'a'; 7850a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek test2a(std::forward_as_tuple(i, c)); 7950a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek#if _LIBCPP_STD_VER > 11 80e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenek static_assert ( test3 (std::forward_as_tuple(i, c)) == 2, "" ); 81e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenek#endif 82e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenek } 83e695e1cd7d8a579455e8969be36cbaf10a316a64Ted Kremenek} 8418c66fdc3c4008d335885695fe36fb5353c5f672Ted Kremenek