Следующий код не будет компилироваться, потому что при последнем вызове ‘demo’ компилятор не может вывести тип из списка инициализации.
#include <boost/parameter/name.hpp>
#include <boost/parameter/preprocessor.hpp>
#include <iostream>
#include <array>
BOOST_PARAMETER_NAME(arg)
BOOST_PARAMETER_FUNCTION(
(void),
demo,
tag,
(optional
(arg, (std::array<int, 3>), (std::array<int,3>{}))
)
)
{
std::cout << arg[1] << std::endl;
}int main()
{
demo();
demo(_arg=std::array<int,3>({1,2,3}));
// 28:14: error: no match for 'operator='
// (operand types are 'const boost::parameter::keyword<tag::arg>'
// and '<brace-enclosed initializer list>')
demo(_arg={1,2,3});
}
Есть ли способ объединить списки инициализации с параметром boost, не добавляя явный вызов в конструктор массива?
Задача ещё не решена.
Других решений пока нет …