see: https://github.com/boostorg/variant2
项目里 std::variant 的使用场景很多,
boost 这个 never-valueless 的版本看起来比 STL 好。