我需要写一个constexpr地址的函数,但我发现它是不可能的.有谁知道这是否可能?
cppreference.com上的参考实现:
template< class T >
T* addressof(T& arg)
{
return reinterpret_cast<T*>(
&const_cast<char&>(
reinterpret_cast<const volatile char&>(arg)
)
);
}
Run Code Online (Sandbox Code Playgroud)
使用reinterpret_cast(类似于GCC实现),所以它不会这样做.我可以看到最新的C++标准草案,N3485也不要求addressof()是constexpr,即使很多函数形成头<utility>最近已升级到constexpr.
一个可能的,虽然不是很有说服力或有用的用例,它将是:
constexpr MyType m;
constexpr MyType const* p = &m; // this works today
constexpr MyType const* p = addressof(m); // this is my question
Run Code Online (Sandbox Code Playgroud)
想象一下,MyType重载了operator&.