我正在从MSVC
to移植一个项目,Borland C++
但在template functions
. 例如,以下
void fn(const char *buffer)
{
vector<string> output;
boost::split(output, string(buffer), is_any_of(","));
// ...
导致编译器错误:
[BCC32 Error] example.cpp(208): E2285 Could not find a match for 'split<SequenceSequenceT,RangeT,PredicateT>(vector<string,allocator<string> >,string,is_any_ofF<char>)'
而修改后的例子
void fn(const char *buffer)
{
vector<string> output;
string sBuffer(buffer);
boost::split(output, sBuffer, is_any_of(","));
// ...
编译得很好。
如文章标题所示,这个问题的概括是,在某些情况下BCC
,如果参数作为在函数参数列表中构造的临时对象传入,则似乎与模板函数不匹配。
在更改所有受影响的代码之前,我想了解为什么BCC
认为第一个示例是错误的。这是编译器的缺陷,还是我的代码不符合C++
标准?
我正在使用RAD Studio / C++ Builder XE2
.