Это примерно то, что я понимаю ...
boost::fusion::make_vector()
от вашего использования boost::fusion::make_vector(33,44)
возвращает тип boost::fusion::vector2<int, int>
, а НЕ тип boost::fusion::vector<int, int, T2, T3,...>
(variadic). Однако boost::fusion::vectorN
типы могут преобразовываться в boost::fusion::vector<>
(variadic) тип.
Первая функция принимает переменный вектор типа NO. Следовательно, элементы не отображаются. Вторая версия принимает тип variadic с двумя объявленными типами шаблонов, однако, так как первый соответствует лучше (потому что типы шаблонов по умолчанию включаются), он выбирается поверх второго, когда вы используете boost::fusion::make_vector
. Когда вы определяете тип вектора, как во втором случае, для него указывается строгий тип, и, следовательно, он соответствует второй функции и отображает два элемента типа int и int.