#ifndef VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER_STRUCT
#define VCZH_REFLECTION_GUITYPEDESCRIPTORBUILDER_STRUCT
#include "GuiTypeDescriptorBuilder.h"
namespace
{
namespace
{
namespace
{
template
<
typename
>
struct
<
,
::
>
{
static
const
::
=
::
;
typedef
;
typedef
;
typedef
&
;
typedef
;
#ifndef VCZH_DEBUG_NO_REFLECTION
static
<
>
(
)
{
return
<
>(
<
>(),
);
}
#endif
};
template
<
typename
>
struct
<
const
,
::
>
{
typedef
<
,
::
>
;
static
const
::
=
::
;
typedef
typename
::
;
typedef
;
typedef
const
&
;
typedef
const
;
#ifndef VCZH_DEBUG_NO_REFLECTION
static
<
>
(
)
{
return
<
>::
();
}
#endif
};
template
<
typename
>
struct
<
volatile
,
::
>
{
typedef
<
,
::
>
;
static
const
::
=
::
;
typedef
typename
::
;
typedef
;
typedef
&
;
typedef
;
#ifndef VCZH_DEBUG_NO_REFLECTION
static
<
>
(
)
{
return
<
>::
();
}
#endif
};
template
<
typename
>
struct
<
*,
::
>
{
typedef
<
,
::
>
;
static
const
::
=
::
;
typedef
typename
::
;
typedef
*
;
typedef
*&
;
typedef
*
;
#ifndef VCZH_DEBUG_NO_REFLECTION
static
<
>
(
)
{
return
<
>(
<
>::
());
}
#endif
};
template
<
typename
>
struct
<
<
>,
::
>
{
typedef
<
,
::
>
;
static
const
::
=
::
;
typedef
typename
::
;
typedef
<
>
;
typedef
<
>&
;
typedef
<
>
;
#ifndef VCZH_DEBUG_NO_REFLECTION
static
<
>
(
)
{
return
<
>(
<
>::
());
}
#endif
};
template
<
typename
>
struct
<
<
>,
::
>
{
typedef
<
,
::
>
;
static
const
::
=
::
;
typedef
typename
::
;
typedef
<
>
;
typedef
<
>&
;
typedef
<
>
;
#ifndef VCZH_DEBUG_NO_REFLECTION
static
<
>
(
)
{
return
<
>(
<
>::
());
}
#endif
};
template
<
typename
>
struct
<
&,
::
>
{
typedef
<
,
::
>
;
static
const
::
=
::
;
typedef
typename
::
;
typedef
typename
::
;
typedef
&
;
typedef
;
#ifndef VCZH_DEBUG_NO_REFLECTION
static
<
>
(
)
{
return
<
>::
();
}
#endif
};
template
<>
struct
<
void
> :
public
<
>
{
};
template
<
typename
>
struct
<
,
::
>
{
static
(
const
&
,
*
)
{
return
<
>(
,
);
}
static
void
(
const
&
,
&
,
*
,
const
&
)
{
=
<
>(
,
,
);
}
};
template
<
typename
>
struct
<
*,
::
>
{
static
(
*
,
*
)
{
return
::
(
);
}
static
*
(
const
&
,
*
,
const
&
)
{
if
(
.
())
return
nullptr
;
*
=
nullptr
;
if
(
.
())
{
result
=
.
()->
<
>();
}
if
(!
result
)
{
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
if
(!
)
{
=
<
>();
}
throw
ArgumentTypeMismtatchException
(
,
,
::
,
);
#else
CHECK_FAIL(L"vl::reflection::description::UnboxValue()#Argument type mismatch.");
#endif
}
return
result
;
}
};
template
<
typename
>
struct
<
<
>,
::
>
{
static
(
<
>
,
*
)
{
return
::
(
);
}
static
<
>
(
const
&
,
*
,
const
&
)
{
if
(
.
())
return
nullptr
;
<
>
;
if
(
.
()==
::
||
.
()==
::
)
{
result
.
()->
<
>();
}
if
(!
result
)
{
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
if
(!
)
{
=
<
>();
}
throw
ArgumentTypeMismtatchException
(
,
,
::
,
);
#else
CHECK_FAIL(L"vl::reflection::description::UnboxValue()#Argument type mismatch.");
#endif
}
return
result
;
}
};
template
<
typename
>
struct
<
<
>,
::
>
{
static
(
<
>
,
*
)
{
return
?
<
,
::
>::
(
.
(),
):
();
}
static
<
>
(
const
&
,
*
,
const
&
)
{
if
(
.
())
{
return
<
>();
}
else
{
return
<
,
::
>::
(
,
,
);
}
}
};
template
<
typename
>
struct
<
,
::
>
{
static
(
const
&
,
*
)
{
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
if
(!
)
{
=
<
typename
<
>::
>();
}
#endif
using
=
typename
vl
::
<
>::
;
return
::
(
new
::
<
>(
),
);
}
static
(
const
&
,
*
,
const
&
)
{
using
=
typename
vl
::
<
>::
;
if
(
auto
=
.
().
<
::
<
>>())
{
return
unboxedValue
;
}
else
{
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
if
(!
)
{
=
<
typename
<
>::
>();
}
throw
ArgumentTypeMismtatchException
(
,
,
::
,
);
#else
CHECK_FAIL(L"vl::reflection::description::UnboxValue()#Argument type mismatch.");
#endif
}
}
};
template
<>
struct
<
,
::
>
{
static
(
const
&
,
*
)
{
return
;
}
static
(
const
&
,
*
,
const
&
)
{
return
;
}
};
template
<>
struct
<
,
::
>
{
static
(
const
&
,
*
)
{
return
();
}
static
(
const
&
,
*
,
const
&
)
{
return
();
}
};
}
}
}
#endif