【发布时间】:2013-01-16 08:38:30
【问题描述】:
这是编译器错误吗?
template <typename T>
T& operator++(T& t)
{
return t;
}
namespace asdf {
enum Foo { };
enum Bar { };
Foo& operator++(Foo& foo);
void fun()
{
Bar bar;
++bar;
}
} // end namespace asdf
int main()
{
return 0;
}
GCC 4.7 错误信息是:
error: no match for 'operator++' in '++bar'
note: candidate is:
note: asdf::Foo& asdf::operator++(asdf::Foo&)
note: no known conversion for argument 1 from 'asdf::Bar' to 'asdf::Foo&'
如果您注释掉该行,它将编译:
Foo& operator++(Foo& foo);
【问题讨论】:
-
Yes it is....
-
不这么认为。 VC++ 生成相同的。
-
@KarthikT:我不确定您的链接代码如何支持“是一个错误”-参数。
标签: c++ namespaces name-lookup