我试图在编译时使用可变参数模板来测试某些属性(type_trait),但似乎以下代码无法编译
template<typename test>
constexpr bool trait_test(){
return test::value;
}
template<typename test, typename... Others>
constexpr bool trait_test(){
return test::value&&trait_test<Others...>();
}
template<typename A, typename... Deriveds>
constexpr bool commonBaseClass{
return trait_test<std::is_base_of<A,Deriveds>...>();
}
问题似乎是当“其他”的长度为 0 时,有 2 个可能的调用
trait_test<typename test>
trait_test<typename test, typename... Others={}>
并且编译器不知道要查看哪个。我当然想偷看第一个(并保留一切 constexpr)