Агрегатная инициализация C ++ 17 для базового класса потрясающая, но она многословна, когда база существует только для предоставления некоторых функций (поэтому нет членов данных).
Вот минимальный пример:
#include <cstddef>
struct base_pod
{
// functions like friend compare operator
};
template<typename T, std::size_t N>
struct der_pod : public base_pod
{
T k[N];
};
int main()
{
der_pod<int, 2> dp {{}, {3, 3} };
}
Как показывает пример выше, я должен предоставить пустое {}
, иначе произойдет ошибка компиляции. живое демо . Если я опущу это:
prog.cc:15:28: error: initializer for aggregate with no elements requires explicit braces
der_pod<int, 2> dp{3, 3};
^
prog.cc:15:31: warning: suggest braces around initialization of subobject [-Wmissing-braces]
der_pod<int, 2> dp{3, 3};
^
{}
1 warning and 1 error generated.
Есть ли обходной путь или путь до C ++ 17?