Есть ли в современном (C++17) способ проверить компилируемость кода и выбрать перегрузку в соответствии с этим ?
Например:
// Хотим узнать будет ли компилироваться этот код для T
template<typename T> void range_for(T const& t) { for(auto&& e : t) {} }
template<typename T, bool = false>
struct is_range_forable : std::false_type{};
template<typename T>
struct is_range_forable<T, __is_compiling__( range_for(std::declval<T>()) ) : std::true_type{};
В C++20
Обещают лямбды в decltype и тогда задача должна решиться без пробем.