Eric Fiselier 
							
						 
					 
					
						
						
							
						
						cae4caba73 
					 
					
						
						
							
							Move __lazy_* metafunctions to type traits and add tests  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@246408  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2015-08-31 03:50:31 +00:00 
						 
				 
			
				
					
						
							
							
								Eric Fiselier 
							
						 
					 
					
						
						
							
						
						8e706d2c3e 
					 
					
						
						
							
							[libcxx] Move tuple_size and tuple_element overloads for pair and array out of !defined(_LIBCPP_HAS_NO_VARIADICS) block.  
						
						... 
						
						
						
						Summary:
There is no reason to guard `tuple_size`, `tuple_element` and `get<I>(...)` for pair and array inside of `<__tuple>` so that they are only available when we have variadic templates.
This requires there be redundant declarations and definitions. It also makes it easy to get things wrong.
For example the following code should compile (and does in c++11).
```
#define _LIBCPP_HAS_NO_VARIADICS
#include <array>
int main()
{
  static_assert((std::tuple_size<std::array<int, 10> volatile>::value == 10), "");
}
```
This patch lifts the non-variadic parts of `tuple_size`, `tuple_types`, and `get<I>(...)` to the top of `<__tuple>` where they don't require variadic templates. This patch also removes `<__tuple_03>` because there is no longer a need for it.
Reviewers: danalbert, K-ballo, mclow.lists
Reviewed By: mclow.lists
Subscribers: cfe-commits
Differential Revision: http://reviews.llvm.org/D7774 
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@232492  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2015-03-17 15:08:03 +00:00 
						 
				 
			
				
					
						
							
							
								Eric Fiselier 
							
						 
					 
					
						
						
							
						
						522aaf67ea 
					 
					
						
						
							
							[libcxx] Delay evaluation of __make_tuple_types to prevent blowing the max template instantiation depth. Fixes Bug  #18345  
						
						... 
						
						
						
						Summary:
http://llvm.org/bugs/show_bug.cgi?id=18345 
Tuple's constructor and assignment operators for "tuple-like" types evaluates __make_tuple_types unnecessarily. In the case of a large array this can blow the template instantiation depth.
Ex:
```
#include <array>
#include <tuple>
#include <memory>
 
typedef std::array<int, 1256> array_t;
typedef std::tuple<array_t> tuple_t;
int main() {
  array_t a;
  tuple_t t(a); // broken
  t = a; // broken
  // make_shared uses tuple behind the scenes. This bug breaks this code.
  std::make_shared<array_t>(a);
}
```
To prevent this from happening we delay the instantiation of `__make_tuple_types` until after we perform the length check. Currently `__make_tuple_types` is instantiated at the same time that the length check .
Test Plan: Two tests have been added. One for the "tuple-like" constructors and another for the "tuple-like" assignment operator. 
Reviewers: mclow.lists, EricWF
Reviewed By: EricWF
Subscribers: K-ballo, cfe-commits
Differential Revision: http://reviews.llvm.org/D4467 
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@220769  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2014-10-28 06:31:22 +00:00 
						 
				 
			
				
					
						
							
							
								Eric Fiselier 
							
						 
					 
					
						
						
							
						
						9020c08989 
					 
					
						
						
							
							D4451: Fix copy/move issues casude by __tuple_leafs's converting constructor  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@213888  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2014-07-24 18:48:34 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						0f678bd69e 
					 
					
						
						
							
							Nico Rieck:  this patch series fixes visibility issues on Windows as explained in < http://lists.cs.uiuc.edu/pipermail/cfe-dev/2013-August/031214.html >.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@188192  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2013-08-12 18:38:34 +00:00 
						 
				 
			
				
					
						
							
							
								Marshall Clow 
							
						 
					 
					
						
						
							
						
						8fc4f5a251 
					 
					
						
						
							
							Make std::get constexpr  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@186525  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2013-07-17 18:25:36 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						83eade6abb 
					 
					
						
						
							
							No functionality change at this time.  I've split _LIBCPP_VISIBLE up into two flags: _LIBCPP_TYPE_VIS and _LIBCPP_FUNC_VIS.  This is in preparation for taking advantage of clang's new __type_visibility__ attribute.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@176593  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2013-03-06 23:30:19 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						33be35effe 
					 
					
						
						
							
							Dimitry Andric:  many visibility fixes.  Howard:  Much appreciated.  Can you send me a patch to CREDITS.TXT?  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@163862  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-09-14 00:39:16 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						dc1345fd44 
					 
					
						
						
							
							I believe tuple is still under development in the standard.  Daniel Krugler is/will be making convincing arguments that a modified form of LWG 2051 (currently NAD Future) is easily acheivable and desirable.  He has demonstrated that a tuple<T...> where all of the T are implicitly convertible from U... should have a tuple constructor that is also implicit, instead of explicit.  This would support the use cases in LWG 2051 while not undermining T... with explicit conversions from U....  This check-in is an experimental implementation of Daniel's work.  I believe this work to be mature enough to warrant inclusion into libc++.  If anyone sees real-world problems that this check in causes, please let me know and I will revert it, and provide the feedback to the LWG.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@153855  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2012-04-01 23:10:42 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						ec3773c2da 
					 
					
						
						
							
							Quash a whole bunch of warnings  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@145624  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-12-01 20:21:04 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						08e17472e4 
					 
					
						
						
							
							Windows support by Ruben Van Boxem.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@142235  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-10-17 20:05:10 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						74248888ab 
					 
					
						
						
							
							Changed constraints on pair and tuple constructors from is_convertible to is_constructible.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@134252  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-07-01 20:12:51 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						f0562af9dd 
					 
					
						
						
							
							noexcept for <array>.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@132359  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-05-31 21:06:33 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						a5e0121b8d 
					 
					
						
						
							
							noexcept for <tuple>.  And in the process learned that I had done it wrong for pair's swap.  I needed to create an __is_nothrow_swappable<T>::value trait that was smart enought to answer false when __is_swappable<T>::value is false.  Otherwise one gets compile-time errors when using pair or tuple of non-swappable types, even if you never try to swap the pair or tuple.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@132204  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-05-27 19:08:18 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						f9b8998795 
					 
					
						
						
							
							I have to revert this recent fix to tuple conversions until clang implements cwg 1170.  Without this fix pair and tuple don't convert properly.  With it, associative containers get access errors when they shouldn't.  cwg 1170 fixes the latter.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@127411  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-03-10 17:27:30 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						fddf722f4e 
					 
					
						
						
							
							Chris Jefferson found this bug to pair/tuple introduced by a recent change to the draft that I missed.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@126743  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-03-01 14:27:55 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						f83417b823 
					 
					
						
						
							
							Chandler Carruth changed >> to > > in several places.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@124120  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2011-01-24 16:07:25 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						0e1493ec5e 
					 
					
						
						
							
							LWG 1385 [FCD] tuple_cat should be a single variadic signature ( http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#1385 ).  This issue is only in Ready status, meaning it is not official, but probably will be this March in Madrid.  It was tentatively accepted in Batavia with the previso that Bill and I didn't have any problems implementing it.  This is my part of that agreement.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@121619  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-12-11 20:47:50 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						f048fe3a09 
					 
					
						
						
							
							N3123  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@119906  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-11-20 18:25:22 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						cd2254b454 
					 
					
						
						
							
							LWG 1191  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@119545  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-11-17 19:52:17 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						86ed8aefb2 
					 
					
						
						
							
							LWG 1118  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@119541  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-11-17 19:22:43 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						b64f8b07c1 
					 
					
						
						
							
							license change  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@119395  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-11-16 22:09:02 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						e049cc5f75 
					 
					
						
						
							
							Cleaning up some tuple code.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@114848  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-09-27 17:54:17 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						333f50d30c 
					 
					
						
						
							
							visibility-decoration.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@114470  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-09-21 20:16:37 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						324bb03bb9 
					 
					
						
						
							
							Fixing whitespace problems  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@111750  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-08-22 00:02:43 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						f5256e16df 
					 
					
						
						
							
							Wiped out some non-ascii characters that snuck into the copyright.  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@103516  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-05-11 21:36:01 +00:00 
						 
				 
			
				
					
						
							
							
								Howard Hinnant 
							
						 
					 
					
						
						
							
						
						bc8d3f97eb 
					 
					
						
						
							
							libcxx initial import  
						
						... 
						
						
						
						git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@103490  91177308-0d34-0410-b5e6-96231b3b80d8 
						
						
					 
					
						2010-05-11 19:42:16 +00:00