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
>之前缺少模板参数
显然,修复是使用查找功能中的T
(T
是a
的类型),它变为:
Find(a, TEqualTo<T>());
一切都很好。 现在的问题是,MSVC(2012)曾经允许的第一个结构究竟是怎么回事?
我只看到一个原因,该类的唯一成员是operator()函数,因此没有任何真正的instanciate,甚至没有typedef。因此编译器意识到它可以从后面的operator()实例中推导出Type
。这很好但很奇怪没有?这是标准吗?