इस कार्यक्रम clang++ test.cpp -std=c++0x
का उपयोग कर संकलन नहीं है बुला:संकलन त्रुटि जब एक कदम एक परोक्ष परिवर्तनीय वस्तु के साथ अतिभारित समारोह
class A
{
public:
A() {}
A(const A&) {}
A(A&&) {}
A& operator = (const A&) { return *this; }
A& operator = (A&&) { return *this; }
};
class B
{
A m_a;
public:
operator const A &() const
{
return m_a;
}
};
int main(int, char**)
{
A a;
B b;
a = b; // compile error
}
त्रुटियों संकलित करें:
Apple clang version 3.0 (tags/Apple/clang-211.10.1) (based on LLVM 3.0svn)
test.cpp:25:9: error: no viable conversion from 'B' to 'A'
a = b;
^
test.cpp:5:5: note: candidate constructor not viable: no known conversion from 'B' to
'const A &' for 1st argument
A(const A&) {}
^
test.cpp:6:5: note: candidate constructor not viable: no known conversion from 'B' to 'A &&'
for 1st argument
A(A&&) {}
^
test.cpp:15:5: note: candidate function
operator const A &() const
^
test.cpp:8:23: note: passing argument to parameter here
A& operator = (A&&) { return *this; }
^
यह क्यों संकलन नहीं करता है? क्यों संकलक A::operator = (A&&)
A::operator = (const A&)
से अधिक पसंद करते हैं करता है?
इसके अलावा, A a = b;
संकलित क्यों होगा जबकि A a; a = b;
(उपर्युक्त प्रोग्राम) और A a(b);
दोनों नहीं?
बजना के किन संस्करणों? – ildjarn
FWIW, आपका कोड 'क्लैंग संस्करण 3.0 (टैग/RELEASE_30/अंतिम) लक्ष्य के साथ संकलित है: x86_64-pc-linux-gnu थ्रेड मॉडल: पॉज़िक्स' और जीसीसी 4.5.3 या 4.6.2 (लेकिन मेरे पास है कोई विचार नहीं है कि यह सामान्य है या नहीं) – Mat
क्लैंग बग की तरह लगता है। –