2014-01-08 13 views
0

這是使用llvm-g ++編譯得很好的代碼,但在OSX Mavericks上使用clang ++失敗。無法在Maverics上使用clang ++編譯有效的C++代碼(適用於llvm-g ++)

ifs.open(original_filename.c_str(), ios::binary); 
istream_iterator<char> begin(ifs), end; 
vector<size_t> positions; 

string prefix = home + "/Apps/" + bundle; 
cout << " * Prefix: " << prefix << endl; 

string pattern = string(BUILD_USER_HOME_DIR); 
cout << " * Searching for pattern: " << pattern << endl; 

while (ifs.good()) { 
    begin = search(begin, end, pattern.begin(), pattern.end()); 

    if (begin != end) { 
     size_t global = (size_t)ifs.tellg() - pattern.length(); 
     positions.push_back(global); 
    } 
} 
ifs.clear(); 
ifs.seekg(0, ios::beg); 

當使用鐺++它結尾爲:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/algorithm:1328:12: error: no matching function for call to '__search' 
return _VSTD::__search<typename add_lvalue_reference<_BinaryPredicate>::type> 
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+0

有更多的錯誤信息嗎?就像已經爲'std :: search'推導出的模板參數類型一樣? – Praetorian

回答

1

該代碼是無效的:std::search()需要使用ForwardIterators被識別兩個序列(參見13年2月25日[alg.search]):

template<class ForwardIterator1, class ForwardIterator2> 
ForwardIterator1 
search(ForwardIterator1 first1, ForwardIterator1 last1, 
     ForwardIterator2 first2, ForwardIterator2 last2); 

但是,std::istream_iterator<std::size_t>是InputIterator。