std:enable_if определить наличие в объекте перегруженного operator& в C++11+?
мне кажется, что оно делается так же, как проверка на существование любой другой member function
Нет, такой подход дает мембера нет.
void_t<decltype(&std::declval<T>())>?
Ох. А так работает, а если написать .operator&, то нет! Спасибо!
А зачем? Если в контексте защиты от того, что кто-то переопределил, то можно ведь просто std::addressof юзать
std::addressof не constexpr до С++17, а надо для реализации, где параметр без перегруженного operator&, сохранить constexpr в С++14.
reintepret cast не констэкспр, да? Свой не написать
Да, он не констэкспр. Но мне достаточно такого разделения по наличию оператора.
А как далеко подобное можно расширить? https://godbolt.org/z/heqWcz37M
Ой! Сюда лучше не ходить, а то компилятор ноги отстрелит по самые уши. Я во времена gcc 4.3 на подобном ub месяц убил (проблема осложнялась тем, что код взрывался только в 4.3, а остальной зоопарк работал)
Обсуждают сегодня