Код: Выделить всё
template
struct ParserCtx {
Parser parser;
ParserCtx(std::string_view description, Parser&& parser)
: parser(std::move(parser))
{}
};
Код: Выделить всё
ParserCtx{"desc", Parser{1, 2.0, 3.0f}};
< /code>
Однако, как вы знаете, это не работает, потому что CTAD-это или ничего. Из CPPREEFERFEREFERE: < /p>
Вывержение аргумента шаблона класса выполняется только в том случае, если в списке аргументов шаблона нет списка аргументов шаблона. Если указан список аргументов шаблона, вывод не происходит.template
auto ParserCtx(std::string_view desc, Parser&& parser) -> impl::ParserCtx {
return {desc, std::move(parser)};
}
ParserCtx("desc", Parser{1, 2.0, 3.0f});
Код: Выделить всё
std::array{1, 2, 3}; // N is not deduced
std::to_array({1, 2, 3}); // N is deduced
Подробнее здесь: https://stackoverflow.com/questions/794 ... plates-com