@Justin Я искал "это не исключение" :)

я есть код, который требует от меня использовать*this, но я хочу, чтобы это было не иначе как дружелюбно

struct foo;

// Would actually be something with conditional noexcept
void do_something(foo&);

struct foo {
    void fn()
        noexcept(noexcept(::do_something(*this)))
    {
        ::do_something(*this);
    }
};

Тем не мение,GCC отклоняет это:

<source>:7:43: error: invalid use of 'this' at top level
         noexcept(noexcept(::do_something(*this)))

Если я просто получаю доступ к члену, gcc в порядке:

void do_something(int);

struct bar {
    int x;

    void fn()
        noexcept(noexcept(::do_something(x)))
    {
        ::do_something(x);
    }
};

Однако, если я получу доступ к члену черезthis указатель,GCC снова жалуется:

struct baz {
    int x;

    void fn()
        noexcept(noexcept(::do_something(this->x)))
    {
        ::do_something(this->x);
    }
};

Диагностика:

<source>:7:42: error: invalid use of 'this' at top level
         noexcept(noexcept(::do_something(this->x)))

Любой другой компилятор, который я пробовалпринимает использованиеthis внутри спецификации noexcept, но я на самом деле не знаю, есть ли ошибка в gcc или во всех других компиляторах.

Может ключевое словоthis использоваться внутри спецификации noexcept?

Ответы на вопрос(1)

Ваш ответ на вопрос