opsiyonel aşağıdaki kodla Verilen:Farklı sonuçlar std için döküm :: <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
.
MSVC 2017 (15.3) ve clang 4.0.0 however writevalue: 0
.
C++ standardına göre hangisi doğrudur?
Her zaman aşırı yük çözünürlüğünün şablonlar tercih etmediğini düşündüm. Neden burası farklı? – Rakete1111
@ Rakete1111 Burada farklı değil. Aşırı yük çözünürlüğü "her zaman" şablon içermez. Eşdeğer dönüşüm dizisi sıralamalarına sahip iki aday göz önüne alındığında, tiebreakerlerden biri, şablonsuz olanı tercih etmektir. Ancak burada eşdeğer dönüşüm dizisi sıralamalarımız yok. – Barry
@Barry Aynı sıralamada iki dönüşümümüz yok mu? Biri 'int', hangisini (8) ve diğeri opsiyonel 'alırdı (2)? –
Rakete1111