return new T(std::forward<Args>(args)...);
На следующем коде:
template<typename T, typename S>
struct A
{
A(T, S)
{}
};
template<template<typename ...> class T, typename ... Args>
auto make(Args && ... args)
{
//return T(std::forward<Args>(args)...);
return new T(std::forward<Args>(args)...);
}
int main()
{
make<A>(1, "asd");
return 0;
}
На десятке работает, но т.к. нужна совместимость с gcc8, то вопрос как можно обойти ошибку?
Кстати, ошибка возникает только при new, закоментированная строчка также работает
new T<Args...> может быть?
как насчёт return new T{std::forward<Args>(args)...};
return std::make_unique<T>(std::forward<Args>(args)...);
Нет, это я в первую очередь попробовал, потому и new)
Чо нет? Та же ошибка?
А можете вот это пояснить, из трех вариантов у меня только это заработало
error: no matching function for call to 'make_unique
Стесняюсь спросить, #include <memory> есть?
а gcc-8 поддерживает CTAD? дело ведь в нём
Насколько я знаю, поддерживает с седьмой версии
make_unique не принимает template template параметр
return std::make_unique<T<Args...>>(std::forward<Args>(args)...);
Да, пример который я скидывал заработал с make_unique, но в оригинальном коде получилось только через new T{}. Решено, спасибо
вообще странно, что new T<Args...> (...) не работает, вроде даже на 4ом работает) https://godbolt.org/z/jW5scd
Видимо это какие-то заморочки уже в моем вызывающем коде
Обсуждают сегодня