पर विचार करें निम्नलिखित कोड:सी ++ 11 वेक्टर push_back अस्पष्ट
#include <vector>
struct S { int a; double b; };
int main()
{
std::vector<S> v;
v.push_back({3, 4.5});
}
जी ++ 4.4 शिकायत है कि कॉल करने के लिए push_back() अस्पष्ट है:
error: call of overloaded ‘push_back(<brace-enclosed initializer list>)’ is ambiguous
note: candidates are: void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = S, _Alloc = std::allocator<S>]
note: void std::vector<_Tp, _Alloc>::push_back(_Tp&&) [with _Tp = S, _Alloc = std::allocator<S>]
इस के अनुसार अस्पष्ट माना जाता है मानक, या यह सिर्फ g ++ के साथ एक मुद्दा है?
मैं जानता हूँ कि यह एस के प्रकार स्पष्ट रूप में लिख कर हल किया जा सकता:
v.push_back(S{3, 4.5});
लेकिन एस के प्रकार के नाम लंबा हो सकता है, इसलिए मैं नहीं बल्कि ऐसा नहीं होगी ...
मैं अनुमान लगा रहा हूं कि आपके कंपाइलर में सभी नए रावल्यू संदर्भ (चाल या &&) कार्यान्वयन पूर्ण नहीं हैं और एक नियम सेट है कि किस अस्थायी के लिए उपयोग करना पसंद करते हैं (चलने योग्य एक लेना चाहिए क्योंकि आपकी ऑब्जेक्ट अस्थायी है) – David