template<typename T>
block_member_storage struct
This template is used to determine the storage type based on an argument to make_block and make_root. The general idea here is to support storing members by reference instead of creating a copy.