Вам нужно опубликовать код, который точно иллюстрирует, что вы делаете. Предупреждение C4510 говорит:
Компилятор не может сгенерировать значение по умолчанию
конструктор для указанного класса
и пользовательский конструктор не был
создано. Вы не сможете
создавать объекты этого типа.
Похоже, это не имеет никакого отношения к std :: list, так что, возможно, что-то не так с вашим кодом.
Я знаю, что это не очень полезно, но код, который вы разместили, выглядит хорошо для меня и скомпилирован без предупреждений с g ++ и comeau. Я больше не использую VC ++, поэтому, боюсь, больше не поможет.
Дальнейшее редактирование: Чисто в духе экспериментов, что произойдет, если вы измените:
const bar *m_bar;
до
bar *m_bar;
Документы MSDN для этого предупреждения говорят, что:
Есть несколько ситуаций, которые
предотвратить компилятор от генерации
конструктор по умолчанию, в том числе:
* A const data member.
Теперь член m_bar не является константой (на что он указывает), но мне интересно, немного ли смущен компилятор по этому поводу.