1. C++ / Говнокод #4052

    +163

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    class A
    {
    public:
    	~A();
    };
    
    void A::!A()
    {
    	//destructor
    }
    
    int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR commandLine, int)
    {
    	A* a = new A();
    	delete a;
    
    	return 0;
    }

    Компилируется и РАБОТАЕТ (заходит в этот "деструктор" при удалении объекта) под Visual C++ 2008.
    Перестаёт компилироваться после любого малейшего изменения (например, если убрать void перед реализацией "деструктора").
    КАК?!

    Запостил: Kirinyale, 21 Августа 2010

    Комментарии (7) RSS

    • При наведении мышью на A::!A() вылазит хинт "A::~A(void)"
      Вполне может быть что мелкомягкие где-то обобщили операции логической инверсии ("!") и побитового дополнения ("~")
      Наверное всё дело в препроцессоре.
      Ответить
      • Возможно. Но почему тогда деструктор с ! требует обязательного указания возвращаемого значения (void), а с ~ запрещает его указывать? :)
        Ответить
    • Намудрили они чего-то там опять:
      http://msdn.microsoft.com/en-us/library/ms235315.aspx
      Ответить
      • а так это не С++... ну вы меня уже почти напугали.
        Ответить
      • Да, похоже на то что это может оказаться приблуда из Managed C++... они ж ещё и новые ключевые слова (типа event) подсвечивают в обычном C++-коде...
        Ответить
    • камрады подсказывают:

      http://www.codeproject.com/KB/mcpp/cppclidtors.aspx
      Ответить
    • Мелкомягкие как всегда говнякуют...
      Ответить

    Добавить комментарий