考虑以下代码:
#include <iostream>
#include <ratio>
template <class R1, class R2, class... RN>
using ratio_sum = ratio_sum<ratio_sum<R1, R2>, RN...>;
template <class R1, class R2>
using ratio_sum<R1, R2> = std::ratio_add<R1, R2>;
int main()
{
std::cout<<ratio_sum<std::ratio<3>, std::ratio<2>>::num<<std::endl;
}
崩溃时出现以下错误:
main.cpp:5:23: error: expected type-specifier before 'ratio_sum'
using ratio_sum = ratio_sum<ratio_sum<R1, R2>, RN...>;
如何解决这个问题? (因为它说明了一般问题,我不想要在可变参数版本中使用std::ratio_add
的变通方法。
答案 0 :(得分:1)
您的代码中有两个错误。您得到的第一个是,当您尝试使用ratio_sum<R1, R2>
时未定义ration_sum<R1, R2>
。对此的解决方案很简单:切换两个定义的位置。
第二个问题是在{{1}}的情况下定义类型别名时无法使用模板。