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

    +1

    1. 1
    2. 2
    using T = int;
    0 .T::~T();

    Чем-то меня эта (полностью валидная) коньструкция очаровала.

    Запостил: gost, 12 Ноября 2020

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

    • Можно использовать в качестве анти-форматтера: после удаления пробела между «0» и «.» (как по-умолчанию делает «Visual Studio», например) конструкция становится невалидной.
      Ответить
      • Что этот код делает? Уважай других пользователей сайта.
        Ответить
        • Ничего.
          Ответить
          • > ничего

            А это UB ли это? Деструктор же джва раза вызовется - вручную и в конце стейтмента.
            Ответить
            • Это по Стандарту nop. Собственно, пример оттуда и взят.
              7.5.4.3 Destruction [expr.prim.id.dtor]
              1 An id-expression that denotes the destructor of a type T names the destructor of T if T is a class type (11.4.6),
              otherwise the id-expression is said to name a pseudo-destructor.
              2 If the id-expression names a pseudo-destructor, T shall be a scalar type and the id-expression shall appear as the
              right operand of a class member access (7.6.1.4) that forms the postfix-expression of a function call (7.6.1.2).
              [Note: Such a call has no effect. —end note]
              3 [Example:
                  struct C { };
                  void f() {
                      C * pc = new C;
                      using C2 = C;
                      pc->C::~C2(); // OK, destroys *pc
                      C().C::~C(); // undefined behavior: temporary of type C destroyed twice
                      using T = int;
                      0 .T::~T(); // OK, no effect
                      0.T::~T(); // error: 0.T is a user-defined-floating-point-literal (5.13.8)
                  }
              —end example]

              N4842
              Ответить
              • Синтаксис питушарский. Надо было вместо a.T::~T() делать T::~T(a), вместо a.operator+(b) - decltype(a)::operator+(a, b).
                Ответить
            • Доброе утро, bormand.
              Ответить
      • А что означает «ноль пробел выражение»?
        Ответить
    • ты уничтожил ноль?
      Ответить

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