【发布时间】:2011-10-14 21:22:45
【问题描述】:
以下在VC++8.0编译器上编译失败,报错(我还没在最新的visual studio编译器上试过。)
错误 C2440: 'return' : 无法从 'const char *' 转换为 'const 字符 (&)[6]'
template <typename T>
inline T const& compare (T const& a, T const& b)
{
return a < b ? b : a;
}
int main()
{
::compare("string1", "string2");
}
在函数模板中,字符串似乎是const char (&)[6]。
据我所知,当应用< 运算符时,数组应该衰减为指针。
那么,这个错误可能是因为可能的错误吗?
【问题讨论】:
-
gcc compiles这段代码没有任何问题,所以这一定是MSVC中的一个bug。
-
无论如何您都不太可能将 C 字符串传递给这样的模板(以比较它们的地址)。
-
这看起来确实像一个错误,MSVC 说表达式
a < b ? b : a的类型是const char *但它应该是const char (&)[8]
标签: c++ templates visual-studio-2005