11#ifndef INCLUDED_BSLMF_NTHPARAMETER_CPP03
12#define INCLUDED_BSLMF_NTHPARAMETER_CPP03
63#ifdef COMPILING_BSLMF_NTHPARAMETER_H
73struct NthParameter_Sentinel;
75#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
78#ifndef BSLMF_NTHPARAMETER_VARIADIC_LIMIT
79#define BSLMF_NTHPARAMETER_VARIADIC_LIMIT 15
81#ifndef BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A
82#define BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A BSLMF_NTHPARAMETER_VARIADIC_LIMIT
85template <std::size_t t_N,
86 class t_FIRST_PARAM = NthParameter_Sentinel
87#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 0
88 ,
class t_PARAMS_0 = BSLS_COMPILERFEATURES_NILT
91#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 1
92 ,
class t_PARAMS_1 = BSLS_COMPILERFEATURES_NILT
95#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 2
96 ,
class t_PARAMS_2 = BSLS_COMPILERFEATURES_NILT
99#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 3
100 ,
class t_PARAMS_3 = BSLS_COMPILERFEATURES_NILT
103#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 4
104 ,
class t_PARAMS_4 = BSLS_COMPILERFEATURES_NILT
107#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 5
108 ,
class t_PARAMS_5 = BSLS_COMPILERFEATURES_NILT
111#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 6
112 ,
class t_PARAMS_6 = BSLS_COMPILERFEATURES_NILT
115#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 7
116 ,
class t_PARAMS_7 = BSLS_COMPILERFEATURES_NILT
119#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 8
120 ,
class t_PARAMS_8 = BSLS_COMPILERFEATURES_NILT
123#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 9
124 ,
class t_PARAMS_9 = BSLS_COMPILERFEATURES_NILT
127#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 10
128 ,
class t_PARAMS_10 = BSLS_COMPILERFEATURES_NILT
131#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 11
132 ,
class t_PARAMS_11 = BSLS_COMPILERFEATURES_NILT
135#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 12
136 ,
class t_PARAMS_12 = BSLS_COMPILERFEATURES_NILT
139#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 13
140 ,
class t_PARAMS_13 = BSLS_COMPILERFEATURES_NILT
143#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 14
144 ,
class t_PARAMS_14 = BSLS_COMPILERFEATURES_NILT
146 ,
class = BSLS_COMPILERFEATURES_NILT>
149#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 0
150template <std::
size_t t_N,
class t_FIRST_PARAM>
151struct NthParameter<t_N, t_FIRST_PARAM> {
153 typedef typename NthParameter<t_N - 1>
::Type Type;
157#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 1
158template <std::
size_t t_N,
class t_FIRST_PARAM,
class t_PARAMS_01>
159struct NthParameter<t_N, t_FIRST_PARAM, t_PARAMS_01> {
161 typedef typename NthParameter<t_N - 1, t_PARAMS_01>
::Type Type;
165#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 2
166template <std::size_t t_N,
class t_FIRST_PARAM,
class t_PARAMS_01,
168struct NthParameter<t_N, t_FIRST_PARAM, t_PARAMS_01,
171 typedef typename NthParameter<t_N - 1, t_PARAMS_01,
176#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 3
177template <std::size_t t_N,
class t_FIRST_PARAM,
class t_PARAMS_01,
180struct NthParameter<t_N, t_FIRST_PARAM, t_PARAMS_01,
184 typedef typename NthParameter<t_N - 1, t_PARAMS_01,
190#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 4
191template <std::size_t t_N,
class t_FIRST_PARAM,
class t_PARAMS_01,
195struct NthParameter<t_N, t_FIRST_PARAM, t_PARAMS_01,
200 typedef typename NthParameter<t_N - 1, t_PARAMS_01,
207#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 5
208template <std::size_t t_N,
class t_FIRST_PARAM,
class t_PARAMS_01,
213struct NthParameter<t_N, t_FIRST_PARAM, t_PARAMS_01,
219 typedef typename NthParameter<t_N - 1, t_PARAMS_01,
227#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 6
228template <std::size_t t_N,
class t_FIRST_PARAM,
class t_PARAMS_01,
234struct NthParameter<t_N, t_FIRST_PARAM, t_PARAMS_01,
241 typedef typename NthParameter<t_N - 1, t_PARAMS_01,
250#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 7
251template <std::size_t t_N,
class t_FIRST_PARAM,
class t_PARAMS_01,
258struct NthParameter<t_N, t_FIRST_PARAM, t_PARAMS_01,
266 typedef typename NthParameter<t_N - 1, t_PARAMS_01,
276#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 8
277template <std::size_t t_N,
class t_FIRST_PARAM,
class t_PARAMS_01,
285struct NthParameter<t_N, t_FIRST_PARAM, t_PARAMS_01,
294 typedef typename NthParameter<t_N - 1, t_PARAMS_01,
305#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 9
306template <std::size_t t_N,
class t_FIRST_PARAM,
class t_PARAMS_01,
315struct NthParameter<t_N, t_FIRST_PARAM, t_PARAMS_01,
325 typedef typename NthParameter<t_N - 1, t_PARAMS_01,
337#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 10
338template <std::size_t t_N,
class t_FIRST_PARAM,
class t_PARAMS_01,
348struct NthParameter<t_N, t_FIRST_PARAM, t_PARAMS_01,
359 typedef typename NthParameter<t_N - 1, t_PARAMS_01,
372#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 11
373template <std::size_t t_N,
class t_FIRST_PARAM,
class t_PARAMS_01,
384struct NthParameter<t_N, t_FIRST_PARAM, t_PARAMS_01,
396 typedef typename NthParameter<t_N - 1, t_PARAMS_01,
410#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 12
411template <std::size_t t_N,
class t_FIRST_PARAM,
class t_PARAMS_01,
423struct NthParameter<t_N, t_FIRST_PARAM, t_PARAMS_01,
436 typedef typename NthParameter<t_N - 1, t_PARAMS_01,
451#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 13
452template <std::size_t t_N,
class t_FIRST_PARAM,
class t_PARAMS_01,
465struct NthParameter<t_N, t_FIRST_PARAM, t_PARAMS_01,
479 typedef typename NthParameter<t_N - 1, t_PARAMS_01,
495#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 14
496template <std::size_t t_N,
class t_FIRST_PARAM,
class t_PARAMS_01,
510struct NthParameter<t_N, t_FIRST_PARAM, t_PARAMS_01,
525 typedef typename NthParameter<t_N - 1, t_PARAMS_01,
542#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 15
543template <std::size_t t_N,
class t_FIRST_PARAM,
class t_PARAMS_01,
558struct NthParameter<t_N, t_FIRST_PARAM, t_PARAMS_01,
574 typedef typename NthParameter<t_N - 1, t_PARAMS_01,
594#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 0
595template <
class t_FIRST_PARAM>
596struct NthParameter<0, t_FIRST_PARAM> {
598 typedef t_FIRST_PARAM
Type;
602#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 1
603template <
class t_FIRST_PARAM,
class t_PARAMS_01>
604struct NthParameter<0, t_FIRST_PARAM, t_PARAMS_01> {
606 typedef t_FIRST_PARAM
Type;
610#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 2
611template <
class t_FIRST_PARAM,
class t_PARAMS_01,
613struct NthParameter<0, t_FIRST_PARAM, t_PARAMS_01,
616 typedef t_FIRST_PARAM
Type;
620#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 3
621template <
class t_FIRST_PARAM,
class t_PARAMS_01,
624struct NthParameter<0, t_FIRST_PARAM, t_PARAMS_01,
628 typedef t_FIRST_PARAM
Type;
632#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 4
633template <
class t_FIRST_PARAM,
class t_PARAMS_01,
637struct NthParameter<0, t_FIRST_PARAM, t_PARAMS_01,
642 typedef t_FIRST_PARAM
Type;
646#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 5
647template <
class t_FIRST_PARAM,
class t_PARAMS_01,
652struct NthParameter<0, t_FIRST_PARAM, t_PARAMS_01,
658 typedef t_FIRST_PARAM
Type;
662#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 6
663template <
class t_FIRST_PARAM,
class t_PARAMS_01,
669struct NthParameter<0, t_FIRST_PARAM, t_PARAMS_01,
676 typedef t_FIRST_PARAM
Type;
680#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 7
681template <
class t_FIRST_PARAM,
class t_PARAMS_01,
688struct NthParameter<0, t_FIRST_PARAM, t_PARAMS_01,
696 typedef t_FIRST_PARAM
Type;
700#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 8
701template <
class t_FIRST_PARAM,
class t_PARAMS_01,
709struct NthParameter<0, t_FIRST_PARAM, t_PARAMS_01,
718 typedef t_FIRST_PARAM
Type;
722#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 9
723template <
class t_FIRST_PARAM,
class t_PARAMS_01,
732struct NthParameter<0, t_FIRST_PARAM, t_PARAMS_01,
742 typedef t_FIRST_PARAM
Type;
746#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 10
747template <
class t_FIRST_PARAM,
class t_PARAMS_01,
757struct NthParameter<0, t_FIRST_PARAM, t_PARAMS_01,
768 typedef t_FIRST_PARAM
Type;
772#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 11
773template <
class t_FIRST_PARAM,
class t_PARAMS_01,
784struct NthParameter<0, t_FIRST_PARAM, t_PARAMS_01,
796 typedef t_FIRST_PARAM
Type;
800#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 12
801template <
class t_FIRST_PARAM,
class t_PARAMS_01,
813struct NthParameter<0, t_FIRST_PARAM, t_PARAMS_01,
826 typedef t_FIRST_PARAM
Type;
830#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 13
831template <
class t_FIRST_PARAM,
class t_PARAMS_01,
844struct NthParameter<0, t_FIRST_PARAM, t_PARAMS_01,
858 typedef t_FIRST_PARAM
Type;
862#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 14
863template <
class t_FIRST_PARAM,
class t_PARAMS_01,
877struct NthParameter<0, t_FIRST_PARAM, t_PARAMS_01,
892 typedef t_FIRST_PARAM
Type;
896#if BSLMF_NTHPARAMETER_VARIADIC_LIMIT_A >= 15
897template <
class t_FIRST_PARAM,
class t_PARAMS_01,
912struct NthParameter<0, t_FIRST_PARAM, t_PARAMS_01,
928 typedef t_FIRST_PARAM
Type;
936template <std::size_t t_N,
937 class t_FIRST_PARAM = NthParameter_Sentinel,
941 typedef typename NthParameter<t_N - 1, t_PARAMS...>
::Type Type;
945template <
class t_FIRST_PARAM,
class... t_PARAMS>
946struct NthParameter<0, t_FIRST_PARAM, t_PARAMS...> {
948 typedef t_FIRST_PARAM
Type;
957struct NthParameter<0, NthParameter_Sentinel> {
959#ifdef BSLS_COMPILERFEATURES_SUPPORT_VARIADIC_TEMPLATES
968 typedef NthParameter_Sentinel
Type;
976# error Not valid except when included from bslmf_nthparameter.h
Definition bdlbb_blob.h:576
NthParameter< t_N-1, t_PARAMS... >::Type Type
Definition bslmf_nthparameter.h:140