Clang无法推导含打包可变参数的函数模板参数:合规还是Bug?
Clang无法编译GCC/MSVC可通过的C++代码,是否符合标准?
以下C++代码可在最新版GCC和MSVC中正常编译,但Clang无法通过:
#include <tuple> template<std::size_t... Is, std::size_t... Js> auto test(std::tuple<std::index_sequence<Is, Js>...>) {} int main() { test(std::tuple<std::index_sequence<0, 0>>{}); }
结论
这是Clang的Bug,其行为不符合C++标准。
按照C++模板参数推导规则,当传入std::tuple<std::index_sequence<0,0>>时,模板参数包Is...应被推导为[0],Js...推导为[0],std::tuple<std::index_sequence<Is, Js>...>会展开为包含单个std::index_sequence<0,0>的元组,与实参完全匹配。GCC和MSVC的推导逻辑均符合这一标准预期,而Clang未能正确处理这种嵌套的模板参数包推导场景。你可以向Clang提交Issue报告该问题。
内容的提问来源于stack exchange,提问作者slyx
相关产品推荐
相关产品推荐

