Этот фрагмент демонстрирует, как использовать направляющие вычеты для разрешения source_location::current
вместе с пакетами параметров (см. https://stackoverflow.com/a/57548488/1421332):
template <typename... Params>
struct Test
{
Test(Params&&... params,
const std::source_location& loc = std::source_location::current());
};
template <typename ...Params>
Test(Params&&...) -> Test<Params...>;
, который используется следующим образом:
Test(5, 'A', 3.14f, "foo");
сейчасЯ хочу расширить структуру Test дополнительным типом T, который должен быть указан явно. Я попробовал следующее, но руководство по выводу не принято:
template <typename T, typename... Params>
struct Test
{
Test(Params&&... params,
const std::source_location& loc = std::source_location::current());
};
template <typename T, typename ...Params>
Test(Params&&...) -> Test<T, Params...>;
Компилятор говорит:
шаблон руководства по выводу содержит параметр шаблона, который не может быть выведен.
Мне нужен дополнительный T, чтобы позволить struct Test
внутренне построить объект указанного пользователем типа.
Itследует использовать следующим образом:
Test<MyType>(5, 'A', 3.14f, "foo");
Можно ли определить руководство по удержанию, включая дополнительный T?