What happens in the default case? I propose a debug-time assertion (using BOOST_ASSERT) to make sure we can catch errors when testing this out.