mpl::for_each<s>(print_type());
Это неправильно в двух отношениях.
Во-первых, print_type
- это функция, которая возвращает void
. print_type()
- это попытка вызвать эту функцию. Поскольку он ничего не возвращает, вы не можете вставить его несуществующее возвращаемое значение во что-то другое.
Во-вторых, print_type
- это шаблон функция. Вы не можете вызвать функцию шаблона без указания параметров шаблона. Так что print_type()
плохо сформирован.
В-третьих, даже mpl::for_each<s>(print_type)
не работает, потому что print_type
не является значением (и не может быть преобразовано в значение); это шаблон. Вы не можете передать шаблон в качестве аргумента функции. Вот почему посетители (для многих вещей, не только MPL) являются объектами, которые могут иметь шаблон operator()
членов.