Я не вижу больших проблем с неопределенными поведением. Вы используете #if для проверки на C++ 17, и вы знаете, что до этого нет any
. Если вы действительно этого хотите, я говорю об этом, и поместите псевдоним в std, если он раньше C++ 17.
В конце дня вспомогательные функции/classes/etc, вероятно, будут помещены в другое пространство имен или с префиксом __, потому что это доступно для стандартных библиотек. Я не думаю, что реализация pre-C++ 17 экспорта any
в std.
Нет другого пути. Просто игнорируйте «неопределенное поведение» и выполняйте его, если он работает. Нет ничего волшебного в том, что он разрушает ваш код; худшее, что может произойти, - это неудачная реализация std, и она не скомпилируется при определении псевдонима. На мой взгляд, некоторые люди преувеличивают неопределенные проблемы с поведением.
Просто используйте свое имя и назначьте ему 'boost :: any' или' std :: any', если необходимо? –