Se mi definiscono un enum in questo modo:costruendo enum con sottostante il tipo "bool" di un booleano?
enum Foo : bool { Left = false, Right = true };
poi cercare di costruire uno da un valore booleano in questo modo:
int main (int ac, const char **av) {
Foo foo (ac > 1);
cout << boolalpha << bool(foo) << endl;
return 0;
}
fallisce, ma lavora con un costruttore in più in questo modo:
Foo foo (Foo(ac > 1));
Perché è questo? Ho pensato che Foo foo (...)
era una chiamata al costruttore esplicita?
(ortogonale) Suggerimento: utilizzare 'enum class Foo' e' static_cast() '. –
lorro
In 'Foo foo (Foo (ac> 1))', il secondo 'Foo' è in effetti un cast. – Jarod42
Suppongo che 'Foo (ac> 1)' sia il risultato di typecasting di '(ac> 1)' a 'Foo'. E 'Foo foo (Foo (ac> 1));' implica chiamare il costruttore di copia di default di 'Foo'. – sameerkn