↓のコードはコンパイルが通るのですが、func(1)ではなく、func<int32_t>(1)のようにしなければいけないと思っていたんですが、そうではないんですか?
これはコンパイラが勝手にTの型を推測してくれているのでしょうか?

#include <iostream>

template<class T>
void
func(T value) {
std::cout << value << std::endl;
}

int main() {
func(1);
return 0;
}