MSVC
からにプロジェクトを移植し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
います。