没有尖括号可以调用模板化功能吗?

Whe*_*050 2 templates c++11

关于在C++ 11中调用模板化函数需要什么,我有点困惑,其中为模板参数提供了默认值.

例如,假设我有以下模板化函数

template <class T = double> void foo()
{
  /* Do something */
}
Run Code Online (Sandbox Code Playgroud)

我想在我的代码中的某个地方调用它.所有这些有效的电话都是?

foo(); //Is this OK?
foo<>();
foo<int>();
Run Code Online (Sandbox Code Playgroud)

它与GCC 4.7.2编译得很好,但我不确定它是否是严格正确的C++.我想我的不确定性可能来自<>使用默认模板创建模板化类的实例时使用空尖括号的要求,如下所述:

模板默认参数

但我认为在我的情况下,功能括号()是关键区别?

Cub*_*bbi 8

对函数模板的函数调用,其中每个模板参数都是可推导的或具有默认值,可以使用空尖括号或可以省略它们,两种方式都有效.

不同之处在于,如果省略尖括号,则会邀请重载解析来考虑恰好命名的非模板函数,foo并且恰好可以使用相同的(在本例中为空)参数列表进行调用.

这在C++ 11中没有改变.