Проблема в том, что вы создали как тип sample::what
, так и член sample::what
. Компилятор должен и, по-видимому, разрешает эту проблему, а предупреждение является добрым и явно ошибочным.
Проблема исчезает с:
struct sample {
enum what {
FOO,
BAR
} what_instance; // << Different identifier here
};
и
using demo = sample::what;
Наличие идентификатора типа и идентификатора экземпляра с одинаковым именем в любом случае является плохой идеей по ряду причин. Это сбивает с толку людей, и в этом случае также компилятор. Возможно, компилятор пытается вам что-то сказать; -)