std::string()
- это typeid . Typeid - это простое объявление с отсутствующим идентификатором объявления.
В аргументе шаблона, если существует неопределенность между идентификатором типа и выражением, вызов разрешается в идентификаторе типа. Итак, ваш код выводит 1
Вам нужно убрать скобки ()
, чтобы получить 2 в качестве вывода, т. Е. foo<std::string>()
даст вам вывод 2.