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

    +7

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    #include <iostream>
    
    struct Test {
    	operator auto() -> bool { return true; }
    };
    
    int main() {
    	std::cout << std::boolalpha << Test() << std::endl;
    }

    operator auto() завезли!
    http://ideone.com/sGxeQn

    Запостил: Antervis, 20 Июля 2016

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

    • -> bool даже не обязателен...
      Ответить
    • operator decltype(auto) () тоже работает. Я под впечатлением
      Ответить
    • Шланг не работает с -> bool, визуалка не работает вообще.
      Ответить
      • c++14 то включил?
        Ответить
        • О, точно! Визуалка заработала. И кстати гцц тоже не переваривает -> bool. По крайней мере с -pedantic точно.
          Ответить
          • Так может это работает как template <class T> operator T?
            Ответить
            • нет. operator auto определит тип из return. А operator T - из запрашиваемого.
              Ответить
              • Вот там авто нафиг не нужно имхо. Больше разночтений
                Ответить
                • Да этот синтаксис со стрелочкой - вообще кал какой-то. На мой взгляд, вреда от него несравнимо больше, чем пользы.
                  Ответить
                  • так его и не надо использовать кроме случаев острой необходимости. Которая возникает когда возвращаемый в авто тип ф-ии зависит от переданных аргументов. Либо в лямбдах, там иначе возвращаемый тип не укажешь
                    Ответить
                    • Вот начинается - надо не надо. Не надо было вообще вводить альтернативный синтаксис, чтобы потом новые правила в кодестайл писать не приходилось. И да, я видел проекты, в которых стрелочка преобладает.
                      Ответить
                      • > не надо было вообще вводить альтернативный синтаксис
                        +1. Надо было сразу делать как в паскале, с возвращаемым типом справа (т.е. именно так, как сейчас сделали стрелку). А альтернативно-сишный синтаксис с возвращаемым типом слева - ёбаное говно.
                        Ответить
                        • Лично мне вообще без разницы, с какой стороны тип. А вот стремное auto слева меня напрягает. Уж лучше бы там было function, как в жс.
                          Особенно хуево все стало начиная с 14 стандарта. Теперь этот auto может означать как автоматический вывод типа, так и то, что тип находится справа от функции.
                          Ответить
                          • Только что проверил - можно писать и вот так:
                            auto f() -> auto {
                                return 5;
                            }

                            *facepalm*
                            Ответить
                          • #define function auto
                            Ответить
                            • test.cpp:8:7: error: expected unqualified-id
                              std::function<void(int)> a;
                              ^
                              test.cpp:5:18: note: expanded from macro 'function'
                              #define function auto
                              Ответить
          • хз, mingw 5.3 жрет без единого ворнинга в педантике
            Ответить
            • GCC 6.1:
              main.cpp:4:24: error: a conversion function cannot have a trailing return type
                   operator auto() -> bool { return true; }
                                      ^~~~
              Ответить

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