【发布时间】:2020-04-01 10:28:37
【问题描述】:
当尝试使用以下代码迭代 std::tuple 类型时,我在 clang 和 gcc 中遇到编译器错误:
error: implicit instantiation of undefined template 'std::tuple_element<0, std::tuple<int, float, char> >'
MSVC 编译正常。
#include <array>
#include <iostream>
template <typename Tuple, size_t Index = 0>
inline void iterate_tuple_types() {
using Element = typename std::tuple_element<Index, Tuple>::type;
if constexpr (Index + 1 < std::tuple_size<Tuple>::value) {
iterate_tuple_types<Tuple, Index + 1>();
}
}
int main() {
using t = std::tuple<int, float, char>;
iterate_tuple_types<t>();
}
根据 c++20 标准,哪个编译器是正确的?
【问题讨论】:
标签: c++ templates tuples stdtuple