Я с удивлением обнаружил, что is_swappable<T>
и is_nothrow_swappable<T>
не относятся к новым метафайлам типа С++ 11 type_traits. Они очень полезны для распространения noexcept
для шаблонов и для определения того, можно ли реализовать шаблон без бросания для шаблона.
libС++ сворачивает свои собственные внутренние версии: см. __is_swappable и __is_nothrow_swappable в его версию type_traits, и он широко использует их, но не делает их доступными вне библиотека.
Я закончил тем, что собрал свою собственную версию для личного проекта, который, похоже, работает, но я уверен, что его сломал как-то.
Мне любопытно об отсутствии этих двух, поскольку они кажутся весьма важными. Была ли эта функция рассмотрена во время процесса стандартизации С++ 11, или это был просто недосмотр, что он не был включен? Если бы это было сочтено, что привело к тому, что он не был включен в окончательный стандарт (нехватка времени, проблемы внедрения и т.д.)? Есть ли отчет о дефектах или документ об эволюции, обсуждающий это? Любые планы включить эти черты в С++ 1Y? Есть ли подтвержденная "правильная" версия где-то?