1 template<typename T
, typename P
>
2 struct TwoOptionTemplate
{};
5 struct TwoOptionTemplate
<T
, char> {
11 struct TwoOptionTemplate
<T
, double> {
16 struct TwoOptionTemplate
<T
, T
> {
20 TwoOptionTemplate
<int, char> X0
;
21 TwoOptionTemplate
<int, double> X1
;
22 TwoOptionTemplate
<void *, wchar_t> X2
;
23 TwoOptionTemplate
<long, long> X3
;
24 TwoOptionTemplate
<int, int> X4
;
25 TwoOptionTemplate
<long, long> SingleDest
;
26 TwoOptionTemplate
<int, double> SecondDoubleDest
;
29 template<int I
, class C
>
30 struct IntTemplateSpec
{};
33 struct IntTemplateSpec
<4, C
> {
38 struct IntTemplateSpec
<I
, void *> {
40 static constexpr int val
= I
;
44 struct IntTemplateSpec
<I
, double> {
46 static constexpr int val
= I
;
49 IntTemplateSpec
<4, wchar_t>Y0
;
50 IntTemplateSpec
<5, void *> Y1
;
51 IntTemplateSpec
<1, int> Y2
;
52 IntTemplateSpec
<2, int> Y3
;
53 IntTemplateSpec
<43, double> NumberDest
;
66 template<typename T
, typename X
>
67 struct Child1
: public Two::Three::Parent
<unsigned> {
72 struct Child1
<T
, One::Two::Three::Parent
<T
>> {
78 namespace Dst
{ One::Child1
<double, One::Two::Three::Parent
<double>> Z0Dst
; }
79 One::Child1
<int, float> Z1
;