Рассмотрим этот код:
#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
в вариационной версии).
У вас есть две ошибки в вашем коде. Первое, что вы получаете, это то, что ratio_sum<R1, R2>
не определяется, когда вы пытаетесь его использовать. Решение этого простое: поменяйте местами два определения.
Вторая проблема заключается в том, что вы не можете использовать шаблоны при определении псевдонима типа в случае ration_sum<R1, R2>
,
Других решений пока нет …