Kode berikut dapat dikompilasi dengan baik dengan GCC dan Dentang tetapi berhenti berfungsi di pembaruan terkini untuk 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);
}
Dalam versi terbaru Visual Studio (/std:c++latest), kompilasi gagal dengan indeks tuple di luar batas (std::tuple_element‹18446744073709551613,std::tuple‹>>).
Apakah mungkin untuk mencegah Tuple keluar batas dengan constexpr seperti ini?