Şimdi yazdığım bazı kodlarda beklenmeyen bir sorunla karşılaşıyorum ve hangi derleyicinin doğru olduğundan emin değilim. C++ açık çoklu arg kurucu belirsizlik
Bizconst char*, const char*
süren çok argüman yapıcı var ama açık ilan edilir:
constexpr explicit Wrapper(const char* a, const char* b) : pair(a,b){}
Sonra Wrapper
alır bir işlevi ve std::pair<const char*, const char*>
void q(Wrapper w);
void q(std::pair<const char *, const char *> w);
alır bir aşırı yüklenme
Ve daha sonra ikinci bir aşırı yükü çağırmayı umduğum kodumuz var:
q({"a", "b"});
Bu, clang numaralı telefondan derlenmiştir, ancak hem GCC hem de MSVC'de derlenememektedir. Standartta açık çok argümanlı kurucudan bahsetmeye çalışıyorum ve bu belirsizlikten söz eden bir şey varsa, ancak ilgili metni bulamadım. Sadece hangi davranışın doğru olduğunu ve hangi sorunun olduğunu merak ediyorum.
Godbolt linki: Wrapper için sağlanan yapıcı kullanılması https://godbolt.org/g/2aYUov
Sanırım “açık”, iki argüman alan bir kurucu değil, bir çift argüman alan bir kurucu olmadığı için burada sayılmaz. – nefas
@nefas bu diğer stackoverflow gönderimine göre (https://stackoverflow.com/questions/1118680/explicit-keyword-on-multi-arg-constructor?rq=1) C++ 11 ve sonra – Morten242
@ olarak sayılmalıdır Morten242 Bunu bilmiyordum. Yani kod derlenmeli mi? – nefas