निम्नलिखित कोड को देखते हुए:अलग परिणाम जब एसटीडी कास्टिंग :: वैकल्पिक <T>
#include <iostream>
#include <optional>
struct foo
{
explicit operator std::optional<int>() {
return std::optional<int>(1);
}
explicit operator int() {
return 0;
}
};
int main()
{
foo my_foo;
std::optional<int> my_opt(my_foo);
std::cout << "value: " << my_opt.value() << std::endl;
}
gcc 7.2.0 writesvalue: 1
।
एमएसवीसी 2017 (15.3) और clang 4.0.0 however writevalue: 0
।
सी ++ मानक के अनुसार कौन सा सही है?
मैंने हमेशा सोचा कि ओवरलोड रिज़ॉल्यूशन गैर-टेम्पलेट पसंद करता है। यह यहाँ अलग क्यों है? – Rakete1111
@ Rakete1111 यह अलग नहीं है। ओवरलोड रिज़ॉल्यूशन "हमेशा" गैर-टेम्पलेट्स को पसंद नहीं करता है। समकक्ष रूपांतरण अनुक्रम रैंकिंग वाले दो उम्मीदवारों को देखते हुए, टाईब्रेकर्स में से एक गैर-टेम्पलेट को प्राथमिकता देना है। लेकिन हमारे पास समकक्ष रूपांतरण अनुक्रम रैंकिंग नहीं है। – Barry
@Barry क्या हमारे पास समान रैंकिंग के साथ दो रूपांतरण नहीं हैं? एक 'int', जो (8) और एक 'वैकल्पिक' के लिए ले जाएगा, जो (2) ले जाएगा? –
Rakete1111