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