为什么MSVC接受在没有模板参数的情况下实例化模板类?

时间:2014-06-19 01:11:24

标签: c++ templates visual-studio-2012

template< typename Type >
struct TEqualTo
{
    bool operator() (Type const& lhs, Type const& rhs ) const
    {
        return lhs == rhs;
    }
};
// .... later in a function that takes a functor:
Find(a, TEqualTo());

MSVC接受了它,然后我提交了,然后根据我想的gcc,我得到了其他编译​​器的构建错误报告。

  

在'('token

>之前缺少模板参数

显然,修复是使用查找功能中的TTa的类型),它变为:

Find(a, TEqualTo<T>());

一切都很好。 现在的问题是,MSVC(2012)曾经允许的第一个结构究竟是怎么回事?

我只看到一个原因,该类的唯一成员是operator()函数,因此没有任何真正的instanciate,甚至没有typedef。因此编译器意识到它可以从后面的operator()实例中推导出Type。这很好但很奇怪没有?这是标准吗?

0 个答案:

没有答案