Когда я могу использовать __ if_exists
без написания тонны дерьмового кода?
Похоже, это ключевое слово похоже на директиву препроцессора C, но обрабатывается после препроцессора . И IntelliSense не анализирует его и не выделяет код как мертвый или живой. Вместе они делают анализ кода, написанного с использованием __ if_exists
, действительно нетривиальным.
Пока что я нашел только один относительно безопасный случай. У нас есть контейнерный класс, который принимает адрес хранимого объекта. Когда сохраненный класс имеет перегруженный оператор &
вызывается этот перегруженный оператор, и это вызывает проблемы.
Поэтому я добавил следующую проверку:
__if_exists( T::operator& ) {
static_assert( false );
}
и теперь код по крайней мере не будет компилироваться, если есть оператор и функция-член
является тип хранится.
ИМО, этот вариант использования достаточно ясен и легко читается.
Какие еще есть случаи использования __ if_exists
без получения тонны нечитаемого кода?