Согласно спецификации C ++ 0x , допустимо следующее
class A { A(int i) : x(i) {} A() : A(0) {} int x; };
Но он не компилируется ("A" is not a nonstatic data member or base class of class "A") в VC 2010. Кто-нибудь знает, что не так?
"A" is not a nonstatic data member or base class of class "A"
Visual C ++ 2010 (также известный как VC ++ 10.0) на момент написания этой статьи не поддерживает делегирование конструкторов, чего требует ваш фрагмент кода. VC ++ 10.0 имеет только частичную поддержку C ++ 0x, и на момент написания этой статьи ни один компилятор не реализовал весь набор функций C ++ 0x (хотя это скоро изменится, особенно после завершения разработки стандарта C ++ 0x).
Скотт Мейерс имеет сводку поддержки C ++ 0x в компиляторах gcc и MSVC . Вот еще один список поддержки C ++ 0x в различных компиляторах . Кроме того, список функций C ++ 0x, поддерживаемых в Visual C ++ 2010, прямо из уст .
На данный момент инициализируйте все элементы непосредственно в списке инициализации ваших конструкторов:
class A { public: A(int i) : x(i) {} A() : x(0) {} private: int x; };
MSVC ++ 2010 не поддерживает делегирующий конструктор
На этой странице перечислены функции C + 0x и их поддержка в популярных компиляторах.
Visual Studio пока не поддерживает все 0x. (И никто не должен ожидать; 0x не завершено.)
Здесь описано, какие функции 0x реализованы в VS 2010.