namespace
integral
{




	
struct
zero
{


	
	
static
constexpr
int
value
(
)
noexcept
{
return
0
;
}


	
}
;




	
template
<
typename
T
>


	
const
zero
*
operator
&
(
const
T
&
)
noexcept
{
return
nullptr
;
}




}




namespace
mem
{




	
template
<
typename
T
>


	
struct
address_t
{


	
	
constexpr
auto
operator
->
(
this
auto
&&
self
)
noexcept
{


	
	
	
return
&
self
;


	
	
}




	
	
constexpr
void
value
(
)
noexcept
=
delete
;


	
}
;




	
template
<
typename
T
>


	
constexpr
address_t
<
T
>
address
(
T
*
)
noexcept
{
return
{
}
;
}




}




int
main
(
)
{


	
return
mem
::
address
<
integral
::
zero
>
(
nullptr
)
->
value
(
)
;


}