Кресты / Говнокод #27105 Ссылка на оригинал

0

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

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

Запостил: gost gost, (Updated )

Комментарии (25) 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).
              Ответить

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8