【发布时间】:2014-07-09 00:51:44
【问题描述】:
考虑以下(人工)示例:
template <typename T>
void f(const T&) {}
extern char test[];
int main() {
f(test);
}
char test[] = "";
GCC 和 Clang 都编译成功,但是 Visual C++ 报错:
test.cc(7): error C2664: 'f' : cannot convert parameter 1 from 'char []' 到 'const char (&)[1]' [...vcxproj] 原因:无法从 'char []' 转换为 'const char [1]' 没有可以进行这种转换的上下文
为什么 VC++ 会给出这个错误,而其他编译器接受该代码以及如何避免这个错误?
【问题讨论】:
-
为避免错误,请停止使用 C 样式数组...它们没有正确的值语义
标签: c++ templates visual-c++ gcc clang