【发布时间】:2013-07-24 14:33:06
【问题描述】:
在创建 Matrix 类以便对数组进行多维访问时,我偶然发现了一个奇怪的错误:如果为 () 运算符创建多个重载,Visual Studio C++ 优化器(2010 和 2012)会崩溃。
我设法隔离了错误。将其作为单个代码文件放在项目中会使其崩溃:
template <class T>
class Foo
{
T& Foo::operator() (int i)
{
return 0;
}
// C1001 - Commenting this second overload makes the compiler work correctly
T& Foo::operator() (char c)
{
return 0;
}
};
原代码重载了 (int x, int y),另一个重载了 (Vector2 pos),但错误是一样的。
是否有解决方法,还是我必须忍受的 VS 错误?
【问题讨论】:
-
可能是因为类型被有效地视为相同?由于
char在传递给函数之前被提升为int -
尝试使用 (int i, int j) 更改其中一个的签名。同样的事情发生
-
@Osguima3 如果您的问题得到解决,请考虑将您的问题标记为已回答;)
标签: templates visual-c++ operator-overloading