cerco di utilizzare il valore-inizializzazione per i membri con valore di inizializzazione per i costruttori (non so se ho davvero usare i buoni rapporti ...)uniforme e valore di inizializzazione
Quindi ... Quando ho definire:
struct A
{
int a_;
};
sono in grado di utilizzare:
A a{5};
assert(m.a_==5);
Tuttavia, se voglio usare l'inizializzatore elemento di rinforzo e di un costruttore di inizializzazione-list
struct B
{
int b_ {1};
};
Questo non viene compilato (C++ 14: http://ideone.com/MQ1FMU):
B b{2};
Ecco l'errore:
prog.cpp:19:7: error: no matching function for call to 'B::B(<brace-enclosed initializer list>)'
B b{2};
^
prog.cpp:19:7: note: candidates are:
prog.cpp:10:8: note: constexpr B::B()
struct B
^
prog.cpp:10:8: note: candidate expects 0 arguments, 1 provided
prog.cpp:10:8: note: constexpr B::B(const B&)
prog.cpp:10:8: note: no known conversion for argument 1 from 'int' to 'const B&'
prog.cpp:10:8: note: constexpr B::B(B&&)
prog.cpp:10:8: note: no known conversion for argument 1 from 'int' to 'B&&'
Qual è la differenza, concept-saggio? Mille grazie!
Beh, pensavo che fosse perché "B" non era un aggregato, ma in realtà sembra soddisfare i requisiti per quanto posso dire. È semplicemente non banale. –
Nota che "C++ 14" su Ideone.com è g ++ - 4.9.2, che non è compatibile con C++ 14 (come attestato da questo errore di compilazione!) – Casey