в C++17 была добавлена прекрасная фича -- class template argument deduction (CTAD), которая избавила нас от необходимости явно указывать шаблонные параметры у классов:
однако по какой-то причине эта фича не работает, если использовать её в контексте default member initializer:
struct foo_t
{
std::pair m_{0, 0}; // clang: error: use of class template 'pair' requires template arguments; argument deduction not allowed in non-static struct member
};
<Примеры, где ваша идея будет полезна. Чем больше примеров и чем большую аудиторию они охватывают - тем лучше>
ярче всего это изменение будет сиять при необходимости параметризации шаблона класса лямбдой:
template<typename F>
struct function_holder_t
{
F m_fun;
};
template<typename F> function_holder_t(F&&) -> function_holder_t<F>;
function_holder_t g_holder{ []{} }; // works just fine
struct foo_t
{
function_holder_t</* what do we even write here? */> m_holder{ []{} };
};
<Описание вашей идеи>
в C++17 была добавлена прекрасная фича -- class template argument deduction (CTAD), которая избавила нас от необходимости явно указывать шаблонные параметры у классов:
однако по какой-то причине эта фича не работает, если использовать её в контексте default member initializer:
<Примеры, где ваша идея будет полезна. Чем больше примеров и чем большую аудиторию они охватывают - тем лучше>
ярче всего это изменение будет сиять при необходимости параметризации шаблона класса лямбдой: