Il codice segue.Clang non può utilizzare l'inizializzazione rinforzata per la conversione definita dall'utente
struct A {
A() {}
};
struct B {
B() {}
explicit operator A() { return A{}; }
};
struct C {
A a;
C(B b) : a{b} {}
};
Ho un struct A
che non è costruibili aggregato (perché ha un costruttore definito). Lo stesso vale per struct B
. Ma ha anche un esplicito operatore di conversione definito dall'utente a struct A
. Ora il costruttore di struct C
prende uno struct B
e lo utilizza per costruire struct A
. Come in cppreference, l'operatore di conversione può partecipare all'inizializzazione diretta, che credo sia il caso dell'inizializzazione del membro di struct C
. Passa a GCC 5.2 (C++ 11). Ma tuttavia non riesce su Clang 3.6. Ho provato con C++ 11, C++ 14 e C++ 1z.
Se cambio a{b}
a a(b)
, passa sia a Clang che a GCC.
Mi chiedo se è un bug di Clang o ho frainteso lo standard?
correlati [Gli operatori di conversione esplicita sono consentiti negli elenchi di inizializzazione rinforzati?] (Http://stackoverflow.com/q/27573928/3953764) –
[funziona in clang ++ 3.8.0] (http://melpon.org/wandbox/permlink/3sDuu76ZIsQPy2ay) –
@PiotrSkotnicki È questo forse http://wg21.cmeerw.net/cwg/issue1467? – dyp