Следующий код отлично компилируется с GCC и Clang, но перестал работать в последнем обновлении Visual Studio (/ std: c ++ latest):
#include <tuple>
template<int pos, typename... T>
void check_tuple(T... types) {
if constexpr (pos <= -1) {
// nothing
} else {
using Type = typename std::tuple_element<pos, std::tuple<T...>>::type;
}
}
int main() {
check_tuple<0>(1.0, 1.0);
check_tuple<-1>(1.0, 1.0);
}
В последней версии Visual Studio (/ std: c ++ latest) компиляция завершается ошибкой, когда индекс кортежа выходит за границы (std :: tuple_element ‹18446744073709551613, std :: tuple‹ >>).
Можно ли предотвратить выход кортежа за пределы с помощью constexpr, подобного этому?