我想启用一个可变参数模板仅当所有模板参数均为整数类型时。我下面的解决方案嵌套了std::void_t
,std::enable_if
,std::is_integral
和包扩展,可以在gcc 8.3.0中按预期工作,但不在clang 8.0.0-3中(代码会编译,但是在clang替换成功时,应该失败时,如下注释所示)。在两种情况下,我都使用
c++ -std=c++17 -Wall -Wextra -pedantic-errors
其中c ++是g ++或clang ++。
我不知道这是否与缺陷有关在cppreference documentation of std::void_t
中提到,或者这是我设计中的错误。
换句话说:我的简单SFINAE原则上正确吗?
我也注意到,替换为std::void_t
由std:void_t<...>
与
typename Voidify<...>::type
使两个程序的行为均与template<typename ... >
struct Voidify{
typedef void type;
};
的gcc版本相同>
这是我的代码:
std::void_t<...>
我想拥有一个可变参数模板,仅当所有模板参数均为整数类型时才启用。我下面的解决方案嵌套了std :: void_t,std :: enable_if,std :: is_integral并打包...