#include <iostream>
template<std::size_t D>
struct FakeNest
{
int & get() noexcept { return all_[0]; }
FakeNest<D-1> &sub() noexcept { return *reinterpret_cast<FakeNest<D-1> *>(&all_[1]); }
private: int all_[D];
};
int main()
{
FakeNest<4> a;
a.sub().sub().get() = 666;
std::cout << *(&a.get() + 2) << std::endl;
}
结果是符合预期的,但总觉得这种写法有点太作弊了,算不算 UB 呢?
几个可能相关的 topic 是: