#include <vector>
#include <iostream>
int main(int argc, char* argv[])
{
std::vector<int> v1,v2;
std::cout << std::distance(v1.begin(),v2.begin());
return 0;
}
है और यह एक बग है, क्योंकि यह दो अलग अलग वैक्टर की iterators तुलना करने के लिए सार्थक नहीं है।
मैं पेज 815 पर 24.4.4 इटरेटर संचालन पर N3376 पर एक नज़र था:
template<class InputIterator> typename iterator_traits<InputIterator>::difference_type distance(InputIterator first, InputIterator last);
आवश्यक है:
InputIterator
रैंडम एक्सेस इटरेटर की आवश्यकताओं को पूरा करते हैं, तोlast
से पहुंच योग्य होगाfirst
याfirst
last
से पहुंच योग्य होगा; अन्यथा,last
first
से पहुंच योग्य होगा।
अब मुझे लगता है कि आवश्यक है कि को पूरा नहीं है।
क्या मानक राज्य इस मामले में होना चाहिए है?
यदि इसे मानक द्वारा अनुमत नहीं किया जाता है, तो यह संभवतः अपरिभाषित व्यवहार में परिणाम देगा, क्योंकि यह विभिन्न वैक्टरों के पुनरावृत्तियों की तुलना करने के लिए अनौपचारिक है – Creris
सामान्य रूप से, आवश्यकता को तोड़ना अपरिभाषित व्यवहार देता है। –