I need to test this in enterprise, but correct instantiation of pointers to forces should be occuring now. The case statement is kludgy and stupid but at least it should only need to happen in one place. There might be a better way around this, but not using decltype - decltype only gets static type info, so decltype(*shared_ptr<force>) is force, no matter what the dereferenced pointer actually is